Updated timed werewolf transformation

This commit is contained in:
Eddoursul 2024-02-19 16:14:54 +01:00
parent efa77fb18f
commit e53ddf74f6
4 changed files with 27 additions and 6 deletions

View File

@ -81,7 +81,7 @@ Float Property BalancingStaminaMalusPercent = 75 Autoreadonly Hidden
Float Property BoostFactorInfluenceOnArmor = 11 Autoreadonly Hidden Float Property BoostFactorInfluenceOnArmor = 11 Autoreadonly Hidden
{the boost factor multiplied with this value is the wolf armor bonus for balancing purposes} {the boost factor multiplied with this value is the wolf armor bonus for balancing purposes}
_00E_Theriantrophist_TransformSC Property transformEffect Auto
_00E_Theriantrophist_Chymikum[] RegisteredChymikums _00E_Theriantrophist_Chymikum[] RegisteredChymikums
bool Sneaking = false bool Sneaking = false
@ -89,7 +89,7 @@ int function _GetScriptVersion() Global
return 1 return 1
endFunction endFunction
Function Transform(int duration = 0) Function Transform(_00E_Theriantrophist_TransformSC aTransformEffect = None, int duration = 0)
bool bWasParalyzed bool bWasParalyzed
Actor player = self.getActorReference() Actor player = self.getActorReference()
@ -112,6 +112,8 @@ Function Transform(int duration = 0)
float preTransformDmgResist = player.GetActorValue("damageResist") float preTransformDmgResist = player.GetActorValue("damageResist")
transformEffect = aTransformEffect
if duration > 0 if duration > 0
; Wolf Blood should dispel the wolf form on finish (as of 2.1) ; Wolf Blood should dispel the wolf form on finish (as of 2.1)
; With SKSE, we equalize their duration. The 5 seconds offset serves as a failsafe in case the main effect ends without changing the race. ; With SKSE, we equalize their duration. The 5 seconds offset serves as a failsafe in case the main effect ends without changing the race.
@ -137,6 +139,11 @@ Function Transform(int duration = 0)
EndFunction EndFunction
Function TransformBackByTimer()
transformEffect = None
TransformBack()
endfunction
Function TransformBack() Function TransformBack()
If _00E_FS_Affinity_ScourgeOfTheWilds_TitanSP == None If _00E_FS_Affinity_ScourgeOfTheWilds_TitanSP == None
@ -158,6 +165,12 @@ Function TransformBack()
EndIf EndIf
PlayerREF.dispelSpell(_00E_Theriantrophist_WolfFormSP) PlayerREF.dispelSpell(_00E_Theriantrophist_WolfFormSP)
if transformEffect
transformEffect.GotoState("ForcedFinish")
transformEffect.Dispel()
transformEffect = None
endif
Endfunction Endfunction
Function OnWolfFormSpellEnd() Function OnWolfFormSpellEnd()

View File

@ -54,7 +54,7 @@ Event OnEffectStart(Actor akTarget, Actor akCaster)
duration = GetDuration() as int duration = GetDuration() as int
endif endif
playerWhileTransformedAlias.Transform(duration) playerWhileTransformedAlias.Transform(self, duration)
Endif Endif
If _00E_MC_CaliaREF.GetDistance(Game.GetPlayer()) <= 700 If _00E_MC_CaliaREF.GetDistance(Game.GetPlayer()) <= 700
@ -65,6 +65,14 @@ Event OnEffectStart(Actor akTarget, Actor akCaster)
Endevent Endevent
auto state NormalFinish
Event OnEffectFinish(Actor akTarget, Actor akCaster) Event OnEffectFinish(Actor akTarget, Actor akCaster)
controlQuest.playerWhileTransformed.TransformBack() controlQuest.playerWhileTransformed.TransformBackByTimer()
endevent endevent
endstate
state ForcedFinish
; do nothing
endstate