Bon j'ai pondu un petit script qui permet d’assommer un NPC pour un temps défini. C'est assez brut de fonderie, mais j'ai du faire avec des limitations de merde ( mention spéciale au resurrect complètement pourri made in Bethesda qui fait lever le NPC instantanément, sans transition fluide, en plus de te le faire apparaître en fade, j'ai du faire une espèce d'introduction timée d'animation pour faire passer la pilule ) et ça a été plus chaud que prévu.
Je m'explique : le seul moyen de déplacer le corps d'un NPC et interagir avec c'est quand il est mort. Ya pas moyen de le laisser vivant et de le foutre en ragdoll, hormis l'immonde paralysie, mais le côté planche de bois c'était pas terrible. D'autres s'y sont déjà cassé les dents avant moi, j'allais pas perdre mon temps.
Donc j'ai du créer un script qui tue le NPC, et qui le revive après un temps défini. Mais c'est pas si simple. Car quand la fonction resurrect est utilisée, elle fait aussi " resurrect " le matos du NPC. Donc ça ruinait un peu tout d’assommer un mec, lui voler son falzar, et le voir revenir 60 secondes après avec le même falzar tout neuf .
Alors j'ai du créer un conteneur qui stocke temporairement son matos et qui le lui redonne après... bref un truc à s'écraser le crâne contre un banc, mais heureusement j'ai eu de l'aide d'un mec terriblement bon.
Du coup en l'état actuel ça donne ceci :
Et ça c'est le script en vrac, hésitez pas à vous en servir, vous en inspirer, ou peu importe j'men branle :
Code:
Scriptname drkKnock extends activemagiceffect
ImageSpaceModifier Property GetHit Auto
Sound Property WPNImpactBluntVsFlesh Auto
ObjectReference Property drkSavedItems Auto
Event OnEffectStart(Actor akTarget, Actor akCaster)
If (Game.GetPlayer().IsSneaking() == true)
WPNImpactBluntVsFlesh.Play(Game.GetPlayer())
GetHit.Apply(4.0)
Game.GetPlayer().PushActorAway(akTarget, 2)
AkTarget.KillSilent()
Game.GetPlayer().PushActorAway(akTarget, 0)
Utility.Wait(1)
Game.GetPlayer().PushActorAway(akTarget, 0)
Utility.Wait(1)
Utility.Wait(60)
Debug.SendAnimationEvent(akTarget, "GetUpStart")
AkTarget.RemoveAllItems(DrkSavedItems)
Utility.Wait(3.8)
AkTarget.Resurrect()
akTarget.RemoveAllItems()
(DrkSavedItems as ObjectReference).RemoveAllItems(AkTarget)
Utility.Wait(1)
Debug.SendAnimationEvent(akTarget, "DrunkStart")
Utility.Wait(10)
Debug.SendAnimationEvent(akTarget, "DrunkStop")
Game.GetPlayer().PushActorAway(akTarget, 1)
endIf
EndEvent