Différences entre les versions de « TESCS2 : Activate »

De Wiwiki
Aller à la navigation Aller à la recherche
(Modif catégorie)
m (TESCS2 : Fonction Activate déplacé vers TESCS2 : Activate)
(Aucune différence)

Version du 19 octobre 2006 à 14:11

Syntaxe :

Activate ActivatorID (optional), NormalActivationFlag (optional) 

Exemple :

Activate player 
Activate 
Activate player, 1 

Cette fonction indique à l'objet d'exécuter son activation (celle par défaut ou celle du bloc OnActivate) Un bloc "OnActivate" dans un script d'objet s'exécute à la place de l'activation par défaut du jeu.

Si ActivatorID est omis, la fonction Activate utilise la référence de celui qui a activé l'objet. C'est très utile à l'intérieur d'un bloc OnActivate où vous voulez que l'activation procède normalement excepté dans certaines circonstances. Voir exemples plus loin.


Que signifie ceci :

Activate

Equivalent à ceci:

ref monActeur                             ; déclaration d'une variable de type référence
set monActeur to GetActionRef             ; la référence de celui qui fait l'action est renseignée (acteur)
Activate monActeur                        ; l'objet du script est activé par l'acteur monActeur	


Dans un script, si ActivatorID est inclu, l'objet activé va exécuter son action par défaut 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… Voir l'exemple plus loin.


Object Type Activation
NPC Dialogue
Container Ouvrir
Door Ouvrir
Weapon, armor, etc Equiper
Book/Scroll Lire


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 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.

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 ce script est activé. Cela provoque l'activation par le joueur de la référence "MaPorte". Mais comme le flag est à 1, l'activation par défaut de MaPorte est remplacée par l'execution du bloc OnActivate du script associé à " MaPorte"… Si MaPorte est un objet fictif, non implanté dans Oblivion, le script associé se comporte comme un sous-programme, utilisable à chaque fois qu'on active quelque-chose.

Script appelant :

begin OnActivate 
  ; passe les paramètres Mygate et player à la fonction activate, lors de l'activation par le PC 
  if IsActionRef player == 1 
     Maporte.Activate player 1 
  endif 
end 

Script appelé, associé à MaPorte

begin OnActivate
    … sous programme …
end