Page 1 sur 1
Ouvrir/fermer une porte par un PNJ
Posté : 13 juin 2021, 22:06
par Confrère_VF
Bonsoir,
Comme le titre l'indique, j'aimerais qu'un PNJ spécifique (et lui seul) ouvre et ferme une porte automatiquement chaque fois qu'il passe dans une Triggerbox. Le seul événement que j'aie pu trouver dans le jeu vanilla s'en rapprochant est la porte de la salle du trône de Vokun (cellule HighGateRuins03), qui s'ouvre toute seule mais uniquement quand le joueur passe dedans.
► Afficher le texte
Code : Tout sélectionner
ScriptName defaultActivateSelf extends objectReference
{Default script that simply activates itself when player enters trigger}
import game
import debug
bool property doOnce = TRUE auto
{Fire only once? Default: TRUE}
bool property disableWhenDone = FALSE auto
{Disable after activating? Default: FALSE}
bool property playerOnly = TRUE auto
{Only Player Triggers? Default: TRUE}
bool property playerAndAlliesOnly = False Auto
{Only player or Allies/Followers/Summons trigger? Overrides playerOnly if that's true as well. Default: TRUE}
int property minLevel auto
{Optional: If set, player must be >= minLevel to activate this}
Faction property PlayerFaction Auto
Faction property CurrentFollowerFaction Auto
Package property Follow Auto
Package property FollowerPackageTemplate Auto
;************************************
auto State waiting
Event onTriggerEnter(objectReference triggerRef)
Actor actorRef = triggerRef as Actor
; check whether we care if the player is activating
if(actorRef == game.getPlayer() || (playerAndAlliesOnly && IsPlayerAlly(triggerRef)) || (playerOnly == False && playerAndAlliesOnly == False))
; also check level (if we even care about that)
if(minLevel == 0 || game.getPlayer().getLevel() >= minLevel)
if doOnce == TRUE
gotoState("allDone")
endif
if disableWhenDone
Self.Disable()
EndIf
; per the description of this script, pass self as the activating ref
activate(self)
endif
endif
endEvent
endState
bool Function IsPlayerAlly(ObjectReference triggerObj)
Actor triggerAct = (triggerObj as Actor)
;Short-circuit this if this isn't an Actor at all, or if it's hostile to the player.
if (triggerAct == None || triggerAct.GetFactionReaction(GetPlayer()) == 1)
return False
EndIf
;Is this a summon or one of the various types of player followers?
return ((triggerAct.IsCommandedActor()) || \
(triggerAct.GetRelationshipRank(GetPlayer()) > 0) || \
(triggerAct.IsInFaction(CurrentFollowerFaction)) || \
(triggerAct.IsPlayerTeammate()) || \
(triggerAct.GetCurrentPackage().GetTemplate() == Follow) || \
(triggerAct.GetCurrentPackage().GetTemplate() == FollowerPackageTemplate))
EndFunction
Je dois reconnaître ne pas tout comprendre, même en essayant de décortiquer le script. Du coup, je cherche un peu d'aide s'il vous plaît.
Re: Ouvrir/fermer une porte par un PNJ
Posté : 02 juil. 2021, 12:11
par Tissendel
Salut,
C'est bien un script qui se déclenche lorsque le joueur passe dans un trigger. Il est un peu complexe car il y a des options ( le déclenchement par les follower, le déclenchement uniquement la première fois, seulement si le joueur à un niveau minimum atteint )
Pour ton cas, tu as juste besoin de vérifier que l'acteur qui déclenche le trigger soit ton PNJ.
Il te faut une property associée à ton PNJ et ensuite tu vérifie la variable triggerRef
Actor property PNJ auto
Event onTriggerEnter(objectReference triggerRef)
if triggerRef as Actor = PNJ
//code
endif
endEvent
Re: Ouvrir/fermer une porte par un PNJ
Posté : 02 juil. 2021, 16:40
par Confrère_VF
Salut, ça fait plaisir de te revoir^^
Tissendel a écrit : 02 juil. 2021, 12:11
Il est
un peu complexe
Donne-moi ta définition de
beaucoup ?
Blague à part, c'est tout ? Seulement une question de propriétés du script ? Je me doutais que ça ne devais pas être très sorcier, mais pas à ce point-là^^
En tout cas je vais noter tout ça, maintenant le truc c'est de faire aller le PNJ à travers le trigger, qui se trouve à plusieurs changements d'écrans^^ Et je ne sais pas pourquoi ses Packages ne fonctionnent pas (le PNJ reste planté où il est).
Merci quand même, en espérant que ça marche ! (et de toute façon, si ça marche pas je reviendrai ici

)