TESCS : GotoJail

De Wiwiki
Révision datée du 26 octobre 2010 à 16:38 par Infomase (discussion | contributions) (Réorganisation des données/Ajout d'infos)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche


La fonction GotoJail supprime de l'inventaire du joueur ses objets volés et le transporte dans la prison la plus proche.

Syntaxe

La syntaxe correcte pour cette fonction est :

Player->GotoJail

À noter que l'appelant ne peut être une entité autre que Player. En effet, téléporter un PNJ en lui retirant ses objets volés n'aurait aucun sens... et ferait planter le compilateur.

Exemple d'utilisation

Voici un exemple d'utilisation : si le joueur est détecté, il va en prison.

Begin VaEnPrisonCrevure

Short doOnce
Float timer

If ( doOnce != 0 )
 If ( CellChanged == 1 )
  Set doOnce to 0
 Else
  Return
 Endif
Endif

If ( timer < 5 )
 Set timer to ( timer + GetSecondsPassed )
 Return
Endif

Set timer to 0

If ( GetDetected, Player == 1 )
 Player->GotoJail
 Set doOnce to 1
Endif

End

Quelques explications sur ce script, plus compliqué que ce que j'ai l'habitude d'écrire dans mes scripts de démonstration.
Le script principal est la partie contenant le GotoJail. Pour éviter que la partie GetDetected, très lourde en temps CPU, n'alourdisse inutilement le script, on ne l'exécute qu'une fois toutes les 5 secondes, à l'aide d'un timer qui contrôle le temps d'exécution.
Le script étant local à une cellule (non précisée), le CellChanged de départ ne sera vrai qu'à la frame où le joueur entrera dans la cellule. Si l'on suppose qu'il s'agit d'une cellule où le joueur n'a pas le droit d'être, on aura une interprétation de ce genre :

Si ( le joueur a déjà été envoyé en prison )
 Si ( le joueur rentre à nouveau dans la cellule interdite )
  Le joueur peut être renvoyé en prison
 Sinon
  Ne pas exécuter la suite du script
 Fin Si
Fin Si

Si ( cela fait moins de 5 secondes que la détection a été testée )
 Ajouter le temps écoulé au temps déjà stocké
 Ne pas exécuter la suite du script
Fin Si

Si ( cela fait plus de 5 secondes que la détection a été testée ) ; condition implicite
 Remettre le "chronomètre" à zéro
Fin Si

Si ( le joueur est détecté ) ; la partie principale
 Envoyer le joueur en prison
 Déclarer que le joueur a déjà été envoyé en prison
Fin Si

Remarques

  • Pour que GotoJail fonctionne, il faut obligatoirement que l'endroit où se trouve le PJ soit relié à une cellule contenant un "PrisonMarker" (door).
  • La liaison peut-être directe ou en passant par de multiples autres cellules. Elle peut n'être que dans un seul sens mais il faut que la chaine des "Doormarker" aboutisse à un "PrisonMarker".
  • Il faut également que le "PrisonMarker" place un "DoorMarker" dans une cellule où se trouve un "stolen_goods" (Coffre indiquant "Preuves"). Il n'a pas été vérifié si cette dernière cellule doit aussi être accessible au PJ.
  • Si ces conditions sont réunies, il n'est pas nécessaire que la cellule où se trouve le PJ soit reliée à l'extérieur de Vvardenfell.
  • L'accès à un "stolen_goods" sans "PrisonMarker" ne suffit pas. L'inverse non plus.
  • Si la cellule du PJ est reliée à plusieurs "PrisonMarker", les objets volés enlevés au PJ par "GotoJail" seront placés dans * le "stolen_goods" lié au "PrisonMarker" le plus proche.
  • Il n'est pas obligatoire de déclarer un propriétaire pour le "stolen_goods".
  • L'emplacement du "PrisonMarker" détermine l'endroit où le PJ est relâché à sa sortie de prison.

Voir également