diff --git a/scripts/_00e_theriantrophist_playeraswerewolf.pex b/scripts/_00e_theriantrophist_playeraswerewolf.pex index 20d1d299..5a1af682 100644 Binary files a/scripts/_00e_theriantrophist_playeraswerewolf.pex and b/scripts/_00e_theriantrophist_playeraswerewolf.pex differ diff --git a/scripts/_00e_theriantrophist_transformsc.pex b/scripts/_00e_theriantrophist_transformsc.pex index 55a5c189..c4c258f9 100644 Binary files a/scripts/_00e_theriantrophist_transformsc.pex and b/scripts/_00e_theriantrophist_transformsc.pex differ diff --git a/source/scripts/_00e_theriantrophist_playeraswerewolf.psc b/source/scripts/_00e_theriantrophist_playeraswerewolf.psc index 4b82f887..061b21b3 100644 --- a/source/scripts/_00e_theriantrophist_playeraswerewolf.psc +++ b/source/scripts/_00e_theriantrophist_playeraswerewolf.psc @@ -81,7 +81,7 @@ Float Property BalancingStaminaMalusPercent = 75 Autoreadonly Hidden Float Property BoostFactorInfluenceOnArmor = 11 Autoreadonly Hidden {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 bool Sneaking = false @@ -89,7 +89,7 @@ int function _GetScriptVersion() Global return 1 endFunction -Function Transform(int duration = 0) +Function Transform(_00E_Theriantrophist_TransformSC aTransformEffect = None, int duration = 0) bool bWasParalyzed Actor player = self.getActorReference() @@ -112,6 +112,8 @@ Function Transform(int duration = 0) float preTransformDmgResist = player.GetActorValue("damageResist") + transformEffect = aTransformEffect + if duration > 0 ; 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. @@ -137,6 +139,11 @@ Function Transform(int duration = 0) EndFunction +Function TransformBackByTimer() + transformEffect = None + TransformBack() +endfunction + Function TransformBack() If _00E_FS_Affinity_ScourgeOfTheWilds_TitanSP == None @@ -158,6 +165,12 @@ Function TransformBack() EndIf PlayerREF.dispelSpell(_00E_Theriantrophist_WolfFormSP) + if transformEffect + transformEffect.GotoState("ForcedFinish") + transformEffect.Dispel() + transformEffect = None + endif + Endfunction Function OnWolfFormSpellEnd() diff --git a/source/scripts/_00e_theriantrophist_transformsc.psc b/source/scripts/_00e_theriantrophist_transformsc.psc index cabaac70..4407d61b 100644 --- a/source/scripts/_00e_theriantrophist_transformsc.psc +++ b/source/scripts/_00e_theriantrophist_transformsc.psc @@ -54,7 +54,7 @@ Event OnEffectStart(Actor akTarget, Actor akCaster) duration = GetDuration() as int endif - playerWhileTransformedAlias.Transform(duration) + playerWhileTransformedAlias.Transform(self, duration) Endif If _00E_MC_CaliaREF.GetDistance(Game.GetPlayer()) <= 700 @@ -65,6 +65,14 @@ Event OnEffectStart(Actor akTarget, Actor akCaster) Endevent -Event OnEffectFinish(Actor akTarget, Actor akCaster) - controlQuest.playerWhileTransformed.TransformBack() -endevent +auto state NormalFinish + + Event OnEffectFinish(Actor akTarget, Actor akCaster) + controlQuest.playerWhileTransformed.TransformBackByTimer() + endevent + +endstate + +state ForcedFinish + ; do nothing +endstate