Voilà: j'ai regardé comment nous avions procédé à l'époque: le script est largement inspiré de celui de Virgo qui doit encore être quelque part par ici:
Script attaché sur la porte (il s'agit d'une grille comme celle de la Ghostgate dans mon cas: le déplacement est donc sur l'axe des Z, comme dans ton script).
Begin _FoB_leb_maingate
Short position
Short ouvrir
Short phase
Short attend
Float timer
;"_FoB_MGOpens" une globale short qui sert de "déclencheur" à l'action: la porte s'ouvre/se ferme lorsqu'elle se met à 1, soit dans les result du dialogue pour l'ouverture, soit dans le script pour la fermeture au bout d'un certain temps.
; position == 0 maingate openned (position initiale de la porte (sous le sol))
; position == 2 maingate closed
if ( MenuMode == 1 )
Return
endif
if ( "_FoB_MGOpens" == 0 ); toute cette partie sert à ouvrir la porte ou à la fermer en fonction de l'heure. Peut-être inutile chez toi.
if ( GameHour >= 21 )
if ( GameHour <= 24 )
if ( position != 2 )
"_FoB_leb_portcullis_01"->Position -27617.973, -66864, 55, 90
SetAngle, z, 90
Set position to 2
endif
endif
endif
if ( GameHour >= 1 )
if ( GameHour < 8 )
if ( position != 2 )
"_FoB_leb_portcullis_01"-> Position -27617.973, -66864, 55, 90
SetAngle, z, 90
Set position to 2
endif
endif
endif
if ( GameHour >= 8 )
if ( GameHour < 21 )
if ( position != 0 )
"_FoB_leb_portcullis_01"-> Position -27617.973, -66864, -190, 90
SetAngle, z, 90
Set position to 0
endif
endif
endif
endif
if ( "_FoB_MGOpens" == 1 ); si le garde ouvre la porte... partie du script qui établit l'état de la porte
if ( attend == 0 )
if ( ouvrir == 0 ); si l'état de la porte est: fermer
Set ouvrir to 1; elle se met en état: ouvrir
PlaySound "_FoB_LebMainGate"; son de la porte
elseif ( ouvrir == 1 ); si elle est en état: ouvrir
Set ouvrir to 0; elle se met en état: fermer
PlaySound "_FoB_LebMainGate"; son de la porte
endif
Set phase to 1
endif
endif
if ( phase == 0 )
Return
elseif ( phase == 1 )
Set attend to 1
Set phase to 2
elseif ( phase == 2 )
if ( timer <= 7.0 )
if ( ouvrir == 1 )
"_FoB_leb_portcullis_01"->Move z 35; la porte remonte du sol pour se refermer
elseif ( ouvrir == 0 )
"_FoB_leb_portcullis_01"->Move z -35; la porte s'enfonce dans le sol: elle s'ouvre
endif
else
if ( ouvrir == 0 )
Set "_FoB_MGOpens" to 0; globale pour les dialogue réinitialisée
endif
if ( ouvrir == 1 ); si la porte est ouverte, elle se refermera au bout d'un moment
if ( timer <= 10.0 )
Set timer to ( timer + GetSecondsPassed )
Return
endif
Set "_FoB_MGOpens" to 1
endif
Set timer to 0
Set phase to 0
Set attend to 0
endif
Set timer to ( timer + GetSecondsPassed )
endif
End _FoB_leb_maingate
****************
1) créer une globale short (ici "_FoB_MGOpens")
2) attacher le script à la porte (qui doit être unique) (script inspiré de celui de Virgo)
3) dans les dialogues du garde, mettre la variable à 1 dans le result chaque fois que l'on veut ouvrir la porte (elle se ferme toute seule grâce au script)
Set "_FoB_MGOpens" to 1
****************
les dialogues employés et leur ordre (à titre d'exemple):
- J'ouvre immédiatement la porte./Condition: Choice = 2/Result:Set _FoB_MGOpens to 1
- Comme vous voudrez./Condition: Choice = 1
- La porte est ouverte! Vous pouvez entrer./Condition: Global _FoB_MGOPens = 1
- Voulez vous entrer?/Condition: Global _FoB_MGOpens = 0/Result: Choice "Non merci." 1 "Volontiers" 2
Chez moi, ça fonctionne.