Scriptname _00E_A1_SkaraggStanceSC extends activemagiceffect  

Import _00E_TalentLibrary
Import Math

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

Event OnEffectStart(Actor akTarget, Actor akCaster)

	If akCaster.HasPerk(_00E_A1_SkaraggStanceResistPerk)
	
		akCaster.RemovePerk(_00E_A1_SkaraggStanceResistPerk)
		akCaster.RemovePerk(_00E_A1_SkaraggStanceDamagePerk)
		akCaster.RemovePerk(_00E_A1_SkaraggStanceStaggerPerk)
		akCaster.RemoveSpell(_00E_A1_SkaraggStanceDisplay01)
		akCaster.RemoveSpell(_00E_A1_SkaraggStanceDisplay02)
		akCaster.RemoveSpell(_00E_A1_SkaraggStanceDisplay03)

		if SKSE.GetVersion()
			Debug.Notification(_00E_Levelsystem_sAbilityStanceSkaragg.GetName() + " " + _00E_Levelsystem_sAbilityStanceEnded.GetName())
		endif
		
		_00E_DispelStance.Play(akCaster)
	
	Else
		If	akCaster.HasMagicEffectWithKeyword(StanceKeyword)
			_00E_A1_QyraiStanceSP.Cast(akCaster)
		EndIf
		
		If _00E_DisableSkillTutorials.GetvalueInt() == 0
			_00E_A1_Tutorial_Stances.ShowAsHelpMessage("Stance", 5, 1, 1)
		EndIf
		
		iIndex = GetPlayerTalentLevel(_00E_Class_Rage_P05_Talent_SkaraggStance, _00E_Class_Rage_P05_Talent_SkaraggStance2, _00E_Class_Rage_P05_Talent_SkaraggStance3)
		
		AdjustStancePerk()
		_00E_A1_SkaraggStanceIMOD.Apply()
		
		if !akCaster.HasPerk(_00E_A1_SkaraggStanceResistPerk)
			akCaster.AddPerk(_00E_A1_SkaraggStanceResistPerk)
		EndIf
		
		if !akCaster.HasPerk(_00E_A1_SkaraggStanceDamagePerk)
			akCaster.AddPerk(_00E_A1_SkaraggStanceDamagePerk)
		EndIf
		
		if !akCaster.HasPerk(_00E_A1_SkaraggStanceStaggerPerk)
			akCaster.AddPerk(_00E_A1_SkaraggStanceStaggerPerk)
		EndIf

		if iIndex == 1
			if !akCaster.HasSpell(_00E_A1_SkaraggStanceDisplay01)
				akCaster.AddSpell(_00E_A1_SkaraggStanceDisplay01, False)
			EndIf
		elseif iIndex == 2
			if !akCaster.HasSpell(_00E_A1_SkaraggStanceDisplay02)
				akCaster.AddSpell(_00E_A1_SkaraggStanceDisplay02, False)
			EndIf
		elseif iIndex == 3
			if !akCaster.HasSpell(_00E_A1_SkaraggStanceDisplay03)
				akCaster.AddSpell(_00E_A1_SkaraggStanceDisplay03, False)
			EndIf
		EndIf
		
		_00E_A1_SkaraggStanceSound.Play(akCaster)
		GhostRedFXShader.Play(akCaster)
		
		if SKSE.GetVersion()
			Debug.Notification(_00E_Levelsystem_sAbilityStanceSkaragg.GetName() + " " + _00E_Levelsystem_sAbilityStanceStarted.GetName())
		endif
		
		Utility.Wait(4)
		GhostRedFXShader.Stop(akCaster)
		
	Endif

EndEvent

;=====================================================================================
;              							Function                					 
;=====================================================================================

Function AdjustStancePerk()

	float iResistMalus = abs((_00E_A1_SkaraggStanceSP.GetNthEffectMagnitude(iIndex)/100) + 1)
	float iDamageBonus = abs((_00E_A1_SkaraggStanceSP.GetNthEffectMagnitude(iIndex + 3)/100) +1)
	float iStaggerBonus = abs(_00E_A1_SkaraggStanceSP.GetNthEffectMagnitude(iIndex + 6))
	
	;added in new perks because of strange functionality of SetNthEntryValue()
	_00E_A1_SkaraggStanceResistPerk.SetNthEntryValue(0, 0, iResistMalus)
	_00E_A1_SkaraggStanceDamagePerk.SetNthEntryValue(0, 0, iDamageBonus)
	_00E_A1_SkaraggStanceStaggerPerk.SetNthEntryValue(0, 0, iStaggerBonus)
	
EndFunction

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

int iIndex

Message Property _00E_Levelsystem_sAbilityStanceStarted Auto
Message Property _00E_Levelsystem_sAbilityStanceEnded Auto
Message Property _00E_Levelsystem_sAbilityStanceSkaragg Auto

Perk Property _00E_A1_SkaraggStanceResistPerk Auto
Perk Property _00E_A1_SkaraggStanceDamagePerk Auto
Perk Property _00E_A1_SkaraggStanceStaggerPerk Auto

Keyword Property StanceKeyword Auto

Perk Property _00E_Class_Rage_P05_Talent_SkaraggStance Auto
Perk Property _00E_Class_Rage_P05_Talent_SkaraggStance2 Auto
Perk Property _00E_Class_Rage_P05_Talent_SkaraggStance3 Auto

ImageSpaceModifier Property _00E_A1_SkaraggStanceIMOD Auto

Sound Property _00E_A1_SkaraggStanceSound Auto
Sound Property _00E_DispelStance Auto

Message Property _00E_A1_Tutorial_Stances Auto

Spell Property _00E_A1_SkaraggStanceSP Auto
Spell Property _00E_A1_SkaraggStanceDisplay01 Auto
Spell Property _00E_A1_SkaraggStanceDisplay02 Auto
Spell Property _00E_A1_SkaraggStanceDisplay03 Auto
Spell Property _00E_A1_QyraiStanceSP Auto

EffectShader Property GhostRedFXShader Auto

GlobalVariable Property _00E_DisableSkillTutorials Auto