Scriptname _00E_A1_QyraiStanceSC extends activemagiceffect  

Import _00E_TalentLibrary
Import Math

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

Event OnEffectStart(Actor akTarget, Actor akCaster)

	If akCaster.HasPerk(_00E_A1_QyranianStanceBlockPerk) && akCaster.HasPerk(_00E_A1_QyranianStanceEnemyCritPerk)
	
		akCaster.RemoveSpell(_00E_A1_QyraiStanceAb)
		akCaster.RemoveSpell(_00E_A1_QyraiStanceDisplay01)
		akCaster.RemoveSpell(_00E_A1_QyraiStanceDisplay02)
		akCaster.RemoveSpell(_00E_A1_QyraiStanceDisplay03)
		akCaster.RemovePerk(_00E_A1_QyranianStanceBlockPerk)
		akCaster.RemovePerk(_00E_A1_QyranianStanceEnemyCritPerk)
		Debug.Notification(Levelsystem._00E_Levelsystem_sAbilityStanceQyrai.GetName() + " " + Levelsystem._00E_Levelsystem_sAbilityStanceEnded.GetName())
		_00E_DispelStance.Play(akCaster)
		
	Else
		If	akCaster.HasMagicEffectWithKeyword(StanceKeyword)
			_00E_A1_SkaraggStanceSP.Cast(akCaster)
		EndIf
		
		If _00E_DisableSkillTutorials.GetvalueInt() == 0
			_00E_A1_Tutorial_Stances.ShowAsHelpMessage("Stance", 5, 1, 1)
		EndIf
		iIndex = GetPlayerTalentLevel(_00E_Class_Derwish_P05_Talent_QyraiStance, _00E_Class_Derwish_P05_Talent_QyraiStance2, _00E_Class_Derwish_P05_Talent_QyraiStance3)
		AdjustStancePerk()
		_00E_A1_QyraiStanceImod.Apply()
		
		if !akCaster.HasSpell(_00E_A1_QyraiStanceAb)
			akCaster.AddSpell(_00E_A1_QyraiStanceAb, False)
		EndIf
		
		if !akCaster.HasPerk(_00E_A1_QyranianStanceBlockPerk)
			akCaster.AddPerk(_00E_A1_QyranianStanceBlockPerk)
		EndIf
		
		if !akCaster.HasPerk(_00E_A1_QyranianStanceEnemyCritPerk)
			akCaster.AddPerk(_00E_A1_QyranianStanceEnemyCritPerk)
		EndIf
		
		if iIndex == 1
			if !akCaster.HasSpell(_00E_A1_QyraiStanceDisplay01)
				akCaster.AddSpell(_00E_A1_QyraiStanceDisplay01, False)
			EndIf
		elseif iIndex == 2
			if !akCaster.HasSpell(_00E_A1_QyraiStanceDisplay02)
				akCaster.AddSpell(_00E_A1_QyraiStanceDisplay02, False)
			EndIf
		elseif iIndex == 3
			if !akCaster.HasSpell(_00E_A1_QyraiStanceDisplay03)
				akCaster.AddSpell(_00E_A1_QyraiStanceDisplay03, False)
			EndIf
		EndIf
		
		NPCKillSwordSpinM.Play(akCaster)
		GhostFXShader.Play(akCaster)
		Debug.Notification(Levelsystem._00E_Levelsystem_sAbilityStanceQyrai.GetName() + " " + Levelsystem._00E_Levelsystem_sAbilityStanceStarted.GetName())
		Utility.Wait(4)
		GhostFXShader.Stop(akCaster)
		
	Endif

EndEvent

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

Function AdjustStancePerk()
	
	float iWPNSpeedBonus = abs((_00E_A1_QyraiStanceSP.GetNthEffectMagnitude(iIndex)/100) + 1)
	float iBlockMalus = abs((_00E_A1_QyraiStanceSP.GetNthEffectMagnitude(iIndex + 3)/100) - 1)
	float iEnemyCritChance = abs((_00E_A1_QyraiStanceSP.GetNthEffectMagnitude(iIndex + 6)/100) + 1)
	float iSpeedBonus = abs((_00E_A1_QyraiStanceSP.GetNthEffectMagnitude(iIndex + 9)/100)) * (PlayerREF.GetActorValue("Speedmult"))
	
	If PlayerREF.HasSpell(PerkBlutsrunst13) || PlayerREF.HasSpell(PerkBlutsrunst10)
	
		If PlayerREF.GetEquippedItemType(1) == 5 || PlayerREF.GetEquippedItemType(1) == 6 && !PlayerREF.HasSpell(PerkBlutsrunst10)
			iWPNSpeedBonus = iWPNSpeedBonus + 0.05
		Elseif PlayerREF.GetEquippedItemType(1) == 5 || PlayerREF.GetEquippedItemType(1) == 6 && PlayerREF.HasSpell(PerkBlutsrunst10)
			iWPNSpeedBonus = iWPNSpeedBonus + 0.10
		EndIf
		
	EndIf
	
	If PlayerREF.HasSpell(PerkDualFlurry30)
	
		If (PlayerREF.GetEquippedItemType(1) > 0 && PlayerREF.GetEquippedItemType(1) <= 4) && (PlayerREF.GetEquippedItemType(0) > 0 && PlayerREF.GetEquippedItemType(0) <= 4) 
			iWPNSpeedBonus = iWPNSpeedBonus + 0.15
		EndIf
	
	EndIf
	
	_00E_A1_QyranianStanceBlockPerk.SetNthEntryValue(0, 0, iBlockMalus)
	_00E_A1_QyranianStanceEnemyCritPerk.SetNthEntryValue(0, 0, iEnemyCritChance)
	_00E_A1_QyraiStanceAb.SetNthEffectMagnitude(0, iWPNSpeedBonus)
	_00E_A1_QyraiStanceAb.SetNthEffectMagnitude(1, iSpeedBonus)

EndFunction

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

int iIndex

_00E_QuestFunctions Property Levelsystem Auto

Actor Property PlayerREF Auto

Perk Property _00E_A1_QyranianStanceBlockPerk Auto
Perk Property _00E_A1_QyranianStanceEnemyCritPerk Auto

Keyword Property StanceKeyword Auto

Perk Property _00E_Class_Derwish_P05_Talent_QyraiStance Auto
Perk Property _00E_Class_Derwish_P05_Talent_QyraiStance2 Auto
Perk Property _00E_Class_Derwish_P05_Talent_QyraiStance3 Auto

ImageSpaceModifier Property _00E_A1_QyraiStanceImod Auto

Sound Property NPCKillSwordSpinM Auto
Sound Property _00E_DispelStance Auto

Message Property _00E_A1_Tutorial_Stances Auto

Spell Property _00E_A1_QyraiStanceSP Auto
Spell Property _00E_A1_QyraiStanceAb Auto
Spell Property _00E_A1_QyraiStanceDisplay01 Auto
Spell Property _00E_A1_QyraiStanceDisplay02 Auto
Spell Property _00E_A1_QyraiStanceDisplay03 Auto
Spell Property PerkBlutsrunst10 Auto
Spell Property PerkBlutsrunst13 Auto
Spell Property PerkDualFlurry30 Auto
Spell Property _00E_A1_SkaraggStanceSP Auto

EffectShader Property GhostFXShader Auto

GlobalVariable Property _00E_DisableSkillTutorials Auto