TESCS : GotoJail
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.