Différences entre les versions de « TESCS2 : Activate »
m |
m |
||
(6 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[ | [[Catégorie:TESCS2 : Fonctions de script|Activate]] | ||
[[Catégorie:TESCS2 : Fonctions d'objet|Activate]] | |||
'''Syntaxe :''' | '''Syntaxe :''' | ||
Ligne 7 : | Ligne 9 : | ||
Activate | Activate | ||
Activate player, 1 | Activate player, 1 | ||
PorteSortie.activate pnjToto ; dans un script provoque le passage du pnjToto par PorteSortie | |||
Cette fonction indique à l'objet d'exécuter son activation | Cette fonction dans un script d'objet indique à l'objet d'exécuter soit son activation par défaut, soit celle de son bloc "OnActivate" (selon la valeur du flag optionnel). | ||
==Activation "manuelle" dans le jeu== | |||
===Activation par la barre d'espace === | |||
Dans le jeu, l'activation d'un objet par le PJ avec la barre d'espace exécute l'action de l'objet prévue par défaut, selon le tableau ci-dessous, sauf si un bloc "OnActivate" est prévu dans un script sur cet objet. En ce cas, l'activation normale ne s'exécutera que si le bloc OnActivate contient lui même une commande Activate. | |||
===Activation par un package === | |||
Il en va de même pour l'activation par un PNJ, sauf que celle-ci dans le jeu est le résultat d'un [[TESCS2 : Packages|package]] de type [[TESCS2 : UseItemAt Package|UseItemAt]]. Il exécutera soit l'action par défaut (exemple passage d'une porte), soit ce qui est prévu par un bloc OnActivate | |||
{|border="1" cellpadding="5" cellspacing="0" align="center" | {|border="1" cellpadding="5" cellspacing="0" align="center" | ||
Ligne 32 : | Ligne 25 : | ||
|- | |- | ||
|NPC | |NPC | ||
| | |Dialoguer : GREETING + liste de sujets si activé par PJ ; HELLO + conversation si autre PNJ | ||
|- | |- | ||
|Container | |Container | ||
| | |Ouvre l'inventaire du container | ||
|- | |||
|Activator | |||
|Affiche son nom ; exécute son script s'il a un bloc OnActivate (animation, piège, commande de porte...) | |||
|- | |- | ||
|Door | |Door | ||
|Ouvrir | |Ouvrir (porte animée), téléporter (porte avec onglet Teleport renseigné et TeleportMarkers correctement positionnés) | ||
|- | |- | ||
|Weapon, armor, etc | |Weapon, armor, etc | ||
| | |Dans le monde : prendre ; dans un inventaire : équiper | ||
|- | |- | ||
|Book/Scroll | |Book/Scroll | ||
| | |Prendre, lire ; dans l'inventaire du PJ : lire | ||
|} | |} | ||
==Utilité d'un bloc OnActivate== | |||
Un bloc OnActivate dans un script d'objet permet donc : | |||
* soit de substituer un comportement différent au comportement normal lors de l'activation dans le jeu, | |||
* soit de faire précéder l'activation normale de certaines commandes particulières pour cet objet, s'appliquant à lui même, au PJ, à des pnj ou à d'autres objets. | |||
== Activation dans un script par la commande Activate == | |||
===Fonctionnement de la commande Activate dans un script=== | |||
Elle a les mêmes conséquences qu'une activation manuelle ou par un package dans le jeu, selon la présence ou non d'un bloc OnActivate dans le script de l'objet activé. Cependant, le bloc Onactivate n'est utilisé que si le flag est à 1 lors de la commande. | |||
La commande d'activation de l'objet peut être dans le script de l'objet lui-même (le préfixe EdtitorID est alors facultatif devant la commande) : | |||
Activate player | |||
Activate | |||
Activate Toto 1 ; ne doit jamais être mis dans le bloc OnActivate (voir plus loin) | |||
L'utilisation la plus courante qui en est faite est d'exécuter finalement l'activation normale, après avoir fait quelques actions préalables dans un bloc OnActivate. | |||
La commande peut être dans un autre script. En ce cas elle est précédée par l'EditorId de la référence de l'objet concerné. | |||
Maporte01ref.activate | |||
Maporte01ref.activate player | |||
Maporte01ref.activate Toto 1 | |||
Cela permet à partir d'un autre script de commander l'activation d'un objet (utile dans tous types de script : quête, objet, magique, résultat). | |||
===Désignation optionnelle de l'activateur=== | |||
Lorsque ActivatorID est présent, c'est cet objet/pnj/pj activateur qui est sensé avoir activé l'objet. C'est une façon de désigner automatiquement un coupable/auteur présumé. | |||
Si ActivatorID est omis, la fonction Activate utilise la référence de celui qui a activé l'objet dans le jeu. C'est très utile à l'intérieur d'un bloc OnActivate où vous voulez que l'activation procède normalement. Voir exemples plus loin. | |||
Dans un script, si ActivatorID est inclu, l'objet activé va exécuter son action comme s'il avait été activé par ActivatorID. C'est important lorsque le fait pour un acteur d'activer un objet à une conséquence sur cet acteur, par exemple une porte de téléportation vers une autre cellule, ou la désignation de l'auteur d'une intrusion... Voir l'exemple plus loin. | |||
'''Remarque :''' La fonction [[TESCS2 : GetActionRef|GetActionRef]] permet de récupérer la référence de celui qui a activé l'objet. | |||
'''Exemple d'utilisation d'Activate dans un script de porte piégée :''' | |||
Scn ActiveMaPorteElectriqueScript | |||
ref monActeur ; déclaration d'une variable de type référence | |||
Begin Onactivate | |||
set monActeur to GetActionRef ; la référence de celui qui fait l'action est renseignée (acteur) | |||
... | |||
... diverses commandes de traitement spécial, sinon cela servirait à rien d'avoir fait un bloc OnActivate... | |||
MonActeur.kill ; la poignée était électrifiée à 1000 Volts... | |||
... | |||
Activate monActeur ; l'objet du script est activé par l'acteur monActeur (téléportation du cadavre) | |||
End | |||
===Influence du flag d'activation normale=== | |||
Si l'option NormalActivationFlag est omise, l'objet activé exécute son activation par défaut. Le bloc de script "OnActivate", éventuellement présent dans le script lié à l'objet, n'est pas exécuté. C'est l'utilisation la plus courante de la fonction activate. | Si l'option ''NormalActivationFlag'' est omise, ou à zero, l'objet activé exécute son activation par défaut. Le bloc de script "OnActivate", éventuellement présent dans le script lié à l'objet, n'est pas exécuté. C'est l'utilisation la plus courante de la fonction activate. | ||
Si NormalActivationFlag est à 1, l'objet activé exécute son bloc de script "OnActivate", s'il existe. C'est donc un moyen de remplacer l'activation par défaut par le morceau de script contenu dans le bloc "OnActivate". Utiliser cette option avec précaution. La présence accidentelle de la fonction activate avec l'option à 1 dans le bloc "OnActivate" provoque une boucle à l'infini et un blocage du jeu. | Si ''NormalActivationFlag'' est à 1, l'objet activé exécute son bloc de script "OnActivate", s'il existe. C'est donc un moyen de remplacer l'activation par défaut par le morceau de script contenu dans le bloc "OnActivate". Utiliser cette option avec précaution. La présence accidentelle de la fonction activate avec l'option à 1 dans le bloc "OnActivate" provoque une boucle à l'infini et un blocage du jeu. | ||
Utilisée avec prudence, cette option est un outil puissant, car elle permet d'exécuter des appels (pseudo fonction call) entre des scripts d'objets et même des sorts. La référence "ActivatorId" sert alors d'argument lors de l'activation de l'objet qui rétroagira avec cette référence passée en argument. Cette utilisation de "Activate" est assez particulière et requiert une conception soignée des scripts concernés. | Utilisée avec prudence, cette option est un outil puissant, car elle permet d'exécuter des appels (pseudo fonction call) entre des scripts d'objets et même des sorts. La référence "ActivatorId" sert alors d'argument lors de l'activation de l'objet qui rétroagira avec cette référence passée en argument. Cette utilisation de "Activate" est assez particulière et requiert une conception soignée des scripts concernés. | ||
===Exemples === | |||
'''Exemple 1:''' | '''Exemple 1:''' | ||
Ligne 66 : | Ligne 109 : | ||
begin OnActivate | begin OnActivate | ||
if MaCondition == 1 | |||
Activate ; exécute l'activation par défaut | |||
else | |||
xxxxx ; faire autre chose | |||
endif | |||
end | end | ||
Ligne 89 : | Ligne 132 : | ||
'''Exemple 4:''' | '''Exemple 4:''' | ||
Voici une application intéressante de l'option NormalActivationFlag : Quelque part, un objet comportant | Voici une application intéressante de l'option NormalActivationFlag : Quelque part, un objet comportant le deuxième script est activé par le premier script. Cela provoque l'activation de la porte fictive "MaPorte" : comme le flag est à 1, l'activation par défaut de MaPorte est remplacée par l'execution du bloc OnActivate du script associé. Si MaPorte est un objet fictif, non accessible dans Oblivion, le script associé se comporte comme un sous-programme, utilisable à chaque fois qu'on l'active fictivement dans un autre script. Cela évite de répéter la même séquence d'instructions dans tous les scripts qui en ont besoin. | ||
Script appelant : | Script appelant : | ||
; Ce morceau de script est présent sur divers scripts associés à des PNJ par exemple | |||
; passe les paramètres | ; passe les paramètres MaPorte et pnjRef à la fonction activate, lors de l'exécution | ||
Set pnjRef to GetSelf | |||
MaPorte.Activate pnjRef 1 | |||
Script appelé, associé à | Script appelé, associé à la porte fictive Maporte : | ||
begin OnActivate | begin OnActivate | ||
set monActeur to GetActionRef ; référence du pnj qui fait l'action fictive | |||
... sous programme de traitement commun à tous les scripts appelants | |||
... selon divers critères : faction, couleur des yeux... modifie l'habillement, les capacités, les valeurs... | |||
... ajoute des packages, des sujets de conversation... etc... | |||
end | end | ||
==Voir également == | |||
*[[TESCS2 : Begin|Blocs de script]] | |||
*[[TESCS2 : OnActivate]] | |||
*[[TESCS2 : GetActionRef]] | |||
*[[TESCS2 : IsActionRef]] | |||
*[[TESCS2 : Packages]] | |||
*[[TESCS2 : UseItemAt Package]] |
Version actuelle datée du 24 décembre 2009 à 18:31
Syntaxe :
Activate ActivatorID (optional), NormalActivationFlag (optional)
Exemple :
Activate player Activate Activate player, 1 PorteSortie.activate pnjToto ; dans un script provoque le passage du pnjToto par PorteSortie
Cette fonction dans un script d'objet indique à l'objet d'exécuter soit son activation par défaut, soit celle de son bloc "OnActivate" (selon la valeur du flag optionnel).
Activation "manuelle" dans le jeu
Activation par la barre d'espace
Dans le jeu, l'activation d'un objet par le PJ avec la barre d'espace exécute l'action de l'objet prévue par défaut, selon le tableau ci-dessous, sauf si un bloc "OnActivate" est prévu dans un script sur cet objet. En ce cas, l'activation normale ne s'exécutera que si le bloc OnActivate contient lui même une commande Activate.
Activation par un package
Il en va de même pour l'activation par un PNJ, sauf que celle-ci dans le jeu est le résultat d'un package de type UseItemAt. Il exécutera soit l'action par défaut (exemple passage d'une porte), soit ce qui est prévu par un bloc OnActivate
Object Type | Activation |
---|---|
NPC | Dialoguer : GREETING + liste de sujets si activé par PJ ; HELLO + conversation si autre PNJ |
Container | Ouvre l'inventaire du container |
Activator | Affiche son nom ; exécute son script s'il a un bloc OnActivate (animation, piège, commande de porte...) |
Door | Ouvrir (porte animée), téléporter (porte avec onglet Teleport renseigné et TeleportMarkers correctement positionnés) |
Weapon, armor, etc | Dans le monde : prendre ; dans un inventaire : équiper |
Book/Scroll | Prendre, lire ; dans l'inventaire du PJ : lire |
Utilité d'un bloc OnActivate
Un bloc OnActivate dans un script d'objet permet donc :
- soit de substituer un comportement différent au comportement normal lors de l'activation dans le jeu,
- soit de faire précéder l'activation normale de certaines commandes particulières pour cet objet, s'appliquant à lui même, au PJ, à des pnj ou à d'autres objets.
Activation dans un script par la commande Activate
Fonctionnement de la commande Activate dans un script
Elle a les mêmes conséquences qu'une activation manuelle ou par un package dans le jeu, selon la présence ou non d'un bloc OnActivate dans le script de l'objet activé. Cependant, le bloc Onactivate n'est utilisé que si le flag est à 1 lors de la commande.
La commande d'activation de l'objet peut être dans le script de l'objet lui-même (le préfixe EdtitorID est alors facultatif devant la commande) :
Activate player Activate Activate Toto 1 ; ne doit jamais être mis dans le bloc OnActivate (voir plus loin)
L'utilisation la plus courante qui en est faite est d'exécuter finalement l'activation normale, après avoir fait quelques actions préalables dans un bloc OnActivate.
La commande peut être dans un autre script. En ce cas elle est précédée par l'EditorId de la référence de l'objet concerné.
Maporte01ref.activate Maporte01ref.activate player Maporte01ref.activate Toto 1
Cela permet à partir d'un autre script de commander l'activation d'un objet (utile dans tous types de script : quête, objet, magique, résultat).
Désignation optionnelle de l'activateur
Lorsque ActivatorID est présent, c'est cet objet/pnj/pj activateur qui est sensé avoir activé l'objet. C'est une façon de désigner automatiquement un coupable/auteur présumé.
Si ActivatorID est omis, la fonction Activate utilise la référence de celui qui a activé l'objet dans le jeu. C'est très utile à l'intérieur d'un bloc OnActivate où vous voulez que l'activation procède normalement. Voir exemples plus loin.
Dans un script, si ActivatorID est inclu, l'objet activé va exécuter son action comme s'il avait été activé par ActivatorID. C'est important lorsque le fait pour un acteur d'activer un objet à une conséquence sur cet acteur, par exemple une porte de téléportation vers une autre cellule, ou la désignation de l'auteur d'une intrusion... Voir l'exemple plus loin.
Remarque : La fonction GetActionRef permet de récupérer la référence de celui qui a activé l'objet.
Exemple d'utilisation d'Activate dans un script de porte piégée :
Scn ActiveMaPorteElectriqueScript ref monActeur ; déclaration d'une variable de type référence Begin Onactivate set monActeur to GetActionRef ; la référence de celui qui fait l'action est renseignée (acteur) ... ... diverses commandes de traitement spécial, sinon cela servirait à rien d'avoir fait un bloc OnActivate... MonActeur.kill ; la poignée était électrifiée à 1000 Volts... ... Activate monActeur ; l'objet du script est activé par l'acteur monActeur (téléportation du cadavre) End
Influence du flag d'activation normale
Si l'option NormalActivationFlag est omise, ou à zero, l'objet activé exécute son activation par défaut. Le bloc de script "OnActivate", éventuellement présent dans le script lié à l'objet, n'est pas exécuté. C'est l'utilisation la plus courante de la fonction activate.
Si NormalActivationFlag est à 1, l'objet activé exécute son bloc de script "OnActivate", s'il existe. C'est donc un moyen de remplacer l'activation par défaut par le morceau de script contenu dans le bloc "OnActivate". Utiliser cette option avec précaution. La présence accidentelle de la fonction activate avec l'option à 1 dans le bloc "OnActivate" provoque une boucle à l'infini et un blocage du jeu.
Utilisée avec prudence, cette option est un outil puissant, car elle permet d'exécuter des appels (pseudo fonction call) entre des scripts d'objets et même des sorts. La référence "ActivatorId" sert alors d'argument lors de l'activation de l'objet qui rétroagira avec cette référence passée en argument. Cette utilisation de "Activate" est assez particulière et requiert une conception soignée des scripts concernés.
Exemples
Exemple 1:
Vous appliquez ce script à une porte , la porte fera comme si le PC l'a réellement activée (si c'est une porte de téléportation, le PC sera téléporté vers le lieu cible).
Activate player
Exemple 2:
Dans ce script, celui qui active l'objet obtient l'activation par défaut que si "MaCondition == 1" est vraie.
begin OnActivate if MaCondition == 1 Activate ; exécute l'activation par défaut else xxxxx ; faire autre chose endif end
Exemple 3:
Ce script boucle sur le message à l'infini – à ne pas faire, bien sûr… Le bloc OnActivate est dans le script d'un objet qui se réactive lui-même à l'infini
float infini begin OnActivate set infini to infini + .1 message "Infinity = %.1f", infini activate player, 1 end
Exemple 4:
Voici une application intéressante de l'option NormalActivationFlag : Quelque part, un objet comportant le deuxième script est activé par le premier script. Cela provoque l'activation de la porte fictive "MaPorte" : comme le flag est à 1, l'activation par défaut de MaPorte est remplacée par l'execution du bloc OnActivate du script associé. Si MaPorte est un objet fictif, non accessible dans Oblivion, le script associé se comporte comme un sous-programme, utilisable à chaque fois qu'on l'active fictivement dans un autre script. Cela évite de répéter la même séquence d'instructions dans tous les scripts qui en ont besoin.
Script appelant :
; Ce morceau de script est présent sur divers scripts associés à des PNJ par exemple ; passe les paramètres MaPorte et pnjRef à la fonction activate, lors de l'exécution Set pnjRef to GetSelf MaPorte.Activate pnjRef 1
Script appelé, associé à la porte fictive Maporte :
begin OnActivate set monActeur to GetActionRef ; référence du pnj qui fait l'action fictive ... sous programme de traitement commun à tous les scripts appelants ... selon divers critères : faction, couleur des yeux... modifie l'habillement, les capacités, les valeurs... ... ajoute des packages, des sujets de conversation... etc... end