Aller au contenu


mini-astuces de script


  • Veuillez vous connecter pour répondre
23 réponses à ce sujet

#1 Rhodan

Rhodan

Posté 23 mars 2004 - 20:25

Je propose ce topic où des petites trucs de scripts que vous connaissez seraient exposés. Je commence:


[*]SetDelete, 1 sans tribunal


Pour simuler cette fonction sans tribunal, et de plus de façon beaucoup plus simple (quand on connait les conditions pour SetDelete :green:), il suffit d'abord de créer une cellule intérieure "poubelle", où le PJ n'aura jamais accès, et de faire sur l'objet à virer:
PositionCell "Nom de la cell poubelle"


[*]Un objet impossible à se débarasser


Pour créer un objet qui, une fois mis dans l'inventaire du PJ, ne pourrait pas être laissé par terre, il suffit de faire:
short OnPCDrop

if ( OnPCDrop )

  Set OnPCDrop to 0
  Activate

endif


#2 Korfandar

Korfandar

    Ch'ti dragon normand...dans son trou


Posté 24 mars 2004 - 10:14


[*]Nombre aléatoire entre les valeurs de deux variable a et b


Comme la fonction random n'accepte pas de variable comme paramètre, pour obtenir un nombre aléatoire entre deux bornes variables a et b, la bonne formule est :
set nombre to a + (((b - a) * ( random, 1000 ))/ 1000)
OU
set nombre to (1000 * a + ((b - a) * (random, 1000 ))) / 1000

L'abus de SMS est dangereux pour l'élocution mentale

Le mod qui révèle (presque) tout sur les dwemers : Dwarmor

Fervent Partisan de l'Instabilité Avatarienne
Quart du quarteron des VGM...


#3 Dirichlet

Dirichlet

    "retraité" de l'administration Bush


Posté 24 mars 2004 - 22:13

Verrouiller une porte pour interdire le crochetage
Ceci est un script que j'ai sur-utilisé dans certains de mes modules pour rendre des entrées inviolables sans la clé.
Vous avez besoin pour celà de:
Une clé avec un nouvel ID: ex: key_user
Une porte avec un nouvel ID: ex: door_unpickable

attachez à la porte un script de ce type:

begin door_unpickable_sc

short key

if ( OnActivate == 1 )
    set key to ( player->GetItemCount "key_user" )
        if ( key >= 1 )
            activate
        elseif ( key < 1 )
            MessageBox "La porte est verrouillée" "OK"
            return
        endif
endif

end

On peut désengoncer ce script:

begin door_unpickable_sc

short key

if ( OnActivate == 1 )
    set key to ( ( player->GetItemCount "key_user" ) + 1 )
   ;Cette commande compte le nombre de clés et lui ajoute un
endif

if ( key == 0 )
   return
endif

if ( key == 1 )
   MessageBox "La porte est verrouillée" "OK"
   set key to 0
   return
endif

if ( key >= 2 )
    activate
    set key to 0
endif

end

I wish i was ...

#4 ced

ced

    les météores


Posté 25 mars 2004 - 13:26

. L'Anneau de télépathie...

Vous en avez marre de faire plusieurs aller-retour entre le camp de Cendrais et Balmora (la maison de Caius) pour pouvoir faire son rapport à Caius... :lol:
Ce script est à attacher à un anneau (par exemple) et permet de communiquer à distance avec un npc

Idéal pour communiquer avec son compagnon d'aventure qu'on a perdu de vue ou qui est à l'autre bout de Morrowind ..

L'exemple ci-dessous est pour communiquer avec Caius (donner la vrai ID pour "ID_Caïus Cosades" )

Begin TelPortable


short OnPCEquip
short Button

if ( MenuMode == 0 )
if ( OnPCEquip == 1 )
    if ( "ID_Caïus Cosades"->GetHealth > 0 )  ;on vérifie si il est tjs en vie qd meme
            Messagebox "Contacter Caïus ?" "non" "oui"
            Set Button to -1
            Set OnPCEquip to 2
    endif
endif
endif

if ( Button > 1 )
        Return
endif

if ( Button == -1 )
         Set Button to ( GetButtonPressed )
endif

if ( Button == 1 )
         "ID_Caïus Cosades"->ForceGreeting
         Set Button to 0
endif


End TelPortable


#5 Dirichlet

Dirichlet

    "retraité" de l'administration Bush


Posté 26 mars 2004 - 07:42

Générateur de niveau
Ce script se place sur une porte à ID unique qui est sensée vous envoyer sur plusieurs niveaux possibles, comme ce sera le cas dans un module comme Kalendaar.

Pour celà vous devez créer trois donjons: On va les appeler Donjon du Braillard, Donjon des kagoutis et Donjon de l'Ogrim. On s'arrange pour placer l'entrée et la porte de ces donjons en position 0, 0, 0 de la cellule (c'est simple à faire en sélectionnant globalement tous les élements de la cellule d'un coup et en la translatant)
Dans ces donjons on place le doormaker de la porte de sortie au niveau de la porte à ID unique qui accueillera le script.

La porte doit alors porter le script suivant (il suffit de donner le nom de donjon de votre choix et de corriger le script avec ce nom)

begin donjonaleatoire

short state
short dice

if ( dice >= 1 )
   if ( OnActivate == 1 )
      set state to 3
   endif
endif


if ( dice == 0 )
    if ( OnActivate == 1 )
      set state to 1
    endif
endif


if ( state == 1 )
     set dice to ( Random, 3 )
     set state to 2
endif

if ( state == 2 )
      set state to 3
      set dice to ( dice + 1 )
endif

if ( state == 3 )

     if ( dice == 1 )
          player->PositionCell "Donjon du Braillard" 0 0 0 0
      endif

     if ( dice == 2 )
          player->PositionCell "Donjon des kagoutis" 0 0 0 0
     endif

     if ( dice == 3 )
          player->PositionCell "Donjon de l'Ogrim" 0 0 0 0
     endif

     set state to 0

endif


end

Notez qu'une fois activée une première fois, la porte mènera ensuite toujours au même donjon, c'est fait exprès. Sinon il n'y aurait pas de condition sur dice avant le OnActivate  :P
I wish i was ...

#6 Dirichlet

Dirichlet

    "retraité" de l'administration Bush


Posté 28 mars 2004 - 04:09

Popoulous dans Morrowind

Et si vous vous mettiez à contrôler le climat sur Vvardenfell?
Je sais ça n'est pas l'objet d'une astuce de script, mais c'est surtout pour étudier du scriptage ordonné.

Quand vous avez beaucoup d'opérations à choix multiple à faire, ce genre d'écriture est très pratique.

Merci à Gilbertus de m'avoir montré comment faire la première fois.

Spoiler

(Edit : Passage du script entre balises spoiler car il est très long)

[*]On voit clairement qu'après la première messageBox, on se réoriente vers une série de nouveaux choix multiples.
Merci à la fonction Copier/Coller  :oops:

[*]State sert de variable de triage. Si state est une dizaine (10 11 12 13 14 ... 19 )alors ça correspond au premier groupe de choix, si c'est une trentaine (30 31 32 ... 39 ) au troisième groupe, et ainsi de suite.

On peut donc jongler avec des variables très grandes, mais alors il faut penser à utiliser un long au lieu d'un short

[*]Les annotations sont très importantes pour s'y retrouver. Il ne faut pas hésiter à en abuser.

[*]La fonction ChangeWeather influera sur le prochain choix de temps aléatoire (toutes les 12 heures)

Bloodmoon offre aussi deux nouvelles météo: neigeux et blizzard
I wish i was ...

#7 Not Quite Dead

Not Quite Dead

    Rincevent


Posté 29 mars 2004 - 16:15

- Comment permettre à un archer de changer d'arme en fonction de la proximité du PC?

Begin _FoB_ai_HlaaluSniper01

Short Counter
Short mySblade
Short myMarksman

if ( MenuMode == 1 )
	Return
endif

if ( OnDeath == 1 )
	Return
endif

; script d'ai pour short blade/arc avec silver arrows
; permet de switcher entre les deux types d'armes selon la distance du PC

if ( GetItemCount "silver arrow" < 1 ); si le NPC a tiré toutes ses flèches, il change d'arme
	SetShortBlade mySblade
	SetMarksman 0
	Return
endif

if ( counter < 15 )
	Set counter to ( counter +1 )
	Return
endif

if ( mySblade == 0 )
	Set mySblade to GetShortBlade
	Set myMarksman to GetMarksman
endif

if ( mySblade > 0 )
	if ( GetDistance Player > 300 )
  if ( GetItemCount "silver arrow" >= 1 )
 	 SetShortBlade 0
 	 SetMarksman myMarksman
  endif
	endif
	if ( GetDistance Player < 300 )
  SetShortBlade mySblade
  SetMarksman 0
	endif
endif

Set counter to 0

End _FoB_ai_HlaaluSniper01

Ce script est fortement  ;) inspiré de celui du tuto de Ghan-Buri-Ghan, mais il m'a paru intéressant à connaître, même pour qui n'aime pas lire des tutos en anglais. :)
« I was a soldier! I killed people!
- You were a doctor!
- I had bad days! »
John Watson, en train d'étrangler Sherlock Holmes, Sherlock - A Scandal in Belgravia (2012)
---------------
Vous aussi rejoignez les Fervents Partisans de l'Immuabilité Avatarienne!
---------------
VGM impénitent (était-il besoin de le préciser?)
---------------
Paterfamilias niv.IV

#8 Daimyo Tai Shi

Daimyo Tai Shi

Posté 31 mars 2004 - 08:57

pour le script de l'archer, t'es sur qu'il y en a besoin ?
parce que les archers changent automatiquement d'arme quand ils sont a proximité ( j'ai testé dans un mod de mini-bataille )... :roll:

Si, comme moi vous êtes perdu(e) sur le net : www.perdu.com


#9 Not Quite Dead

Not Quite Dead

    Rincevent


Posté 31 mars 2004 - 13:51

Peut-être la chose est-elle réglée avec Bloodmoon ou tribunal, mais du temps où j'avais que Morrowind je crois que c'était assez utile. Depuis je le met systématiquement sur les archers que je crée. A tort peut-être... ;)
Bah! Si jamais c'est effectivement inutile, il faudra qu'un modo supprime ma réponse pour préserver la clarté du post. Sorry. :roll:
« I was a soldier! I killed people!
- You were a doctor!
- I had bad days! »
John Watson, en train d'étrangler Sherlock Holmes, Sherlock - A Scandal in Belgravia (2012)
---------------
Vous aussi rejoignez les Fervents Partisans de l'Immuabilité Avatarienne!
---------------
VGM impénitent (était-il besoin de le préciser?)
---------------
Paterfamilias niv.IV

#10 MoscBahh

MoscBahh

    bug dessiné


Posté 31 mars 2004 - 13:58

Pas forcément inutile, mais certains pnjs archers du jeu de base utilisent déjà un script qui leur permet de changer d'arme selon la formation du combat...

Image IPB



Membre tranquillou, mais vraiment zen quoi, des Fervents, enfin, pas trop quand même hein, Partisan, le mot est un peu fort, je le conçois, de l'Immuabilité, c'est vite dit, Avatarienne, ça ressemble à acarienne, non ?

Hurmine & Lalya


#11 Confridín

Confridín

    Daddy ! je VEUX un nouveau sous-nom!!!


Posté 01 juillet 2004 - 10:04

Merci à Ced qui m'a montré ce topic extra.

Postez à la suite pour aider les autres. Je supprimerai les messages de ce topic au fur et à mesure qu'ils seront dans la bibliothèque. Merci à tous ceux qui ont déjà participé ou qui participeront.



Au passage, passage en post-it. :twisted:



EDIT: Un modo peut-il passer ces scripts dans la biblio, ils pourront vraiment servir aux autres  :twisted:
Ancien modérateur de Wiwiland à la retraite.

Ancien créateur et fan du mod Morrowind Stargate.

Et depuis, je suis devenu consultant SEO sur SeoMix et game addict sur Play-Mod

#12 Nenfëa

Nenfëa

    Le poisson bavard de Kalendaar


Posté 31 mars 2005 - 20:43

Faire tourner un objet sur un cercle (avec gestion de l'orientation de l'objet) ( Tribunal requis ! )



1) Mode d'emploi ! :)

Ce script est largement "automatisé", mais vous avez encore faire deux ou trois petites bricoles :

- créer un objet persistant qui servira de centre pour le cercle (ici, je l'ai appelé "nen_centre"). Peut importe l'altitude de cet objet, seules comptent son abscisse et son ordonnée.

- paramétrer par vous même la vitesse de rotation (ici, elle vaut 2). Pour info, la vitesse de rotation doit être légèrement supérieure à :
45/[rayon * ( 1 - sqrt(2)/2 )]
... où sqrt est la fonction racine carrée (et oui, il y a des maths à faire ! ;) ).



2) Le script


Citation

Begin nen_cercleObjet

short nen     ; Variable utilisée en test pour les initialisations

float posX    ; Position de l'objet sur l'axe x
float posY    ; Position de l'objet sur l'axe y
float oriX    ; Position du centre du cercle sur l'axe x
float oriY    ; Position du centre du cercle sur l'axe y
float rayon   ; Rayon du cercle
short sensX   ; Sens de déplacement selon l'axe x.  1 = déplacement vers les x positifs; 0 = déplacement vers les x négatifs
short sensY   ; Sens de déplacement selon l'axe y.  1 = déplacement vers les y positifs; 0 = déplacement vers les y négatifs
short modeX   ; Mode d'incrément.  1 = incrément de posX, puis calcul de posY; 0 = inverse.  Evite une accéleration de l'objet à proximité des axes.
float angle   ; Angle que doit atteindre l'objet

float test    ; Variable intermédiaire utilisée en test
float test2   ; Idem

float timer   ; Compteur de temps



if ( MenuMode == 1 )   ; Ne pas faire se déplacer l'objet en mode menu !
  Return
endif


if ( GetDistance player < 200 )  ; Ne pas se faire déplacer l'objet si le joueur est trop proche (évite que l'objet ne passe à travers le joueur)
  Return
endif


if ( nen == 0 )      ; Batterie d'initialisations :
  Set oriX to ( "nen_centre"->GetPos x )  ; - valeur du centre du cercle selon l'axe x
  Set oriY to ( "nen_centre"->GetPos y )  ; - idem selon l'axe y
  Set rayon to ( GetDistance "nen_centre" ) ; - valeur du rayon
  Set posX to GetPos X    ; - valeur de la position selon l'axe x
  Set posY to GetPos y    ; - idem selon l'axe y
  Set nen to 1
endif

Set timer to ( timer + GetSecondsPassed )  ; Incrément du timer

Set test to ( GetAngle z )  ; * Partie "rotation du bateau" *
if ( angle == 0 )
  if ( test > 180 )  ; Risques d'inversion de rotation avec l'angle 0 : évités
    Rotate z 2
  else
    Rotate z -2
  endif
elseif ( angle == 45 )   ; Idem avec l'angle 45 (??? Pas compris pourquoi ! Lié à l'initialisation ?)
  if ( test > 300 )
    Rotate z 2
  elseif ( test < 45 )
   Rotate z 2
  else
    Rotate z -2
  endif
else     ; Sinon, rotation normale
 if ( test < angle )
   Rotate z 2
  else
   Rotate z -2
  endif
endif
 

if ( timer >= 0.1 )   ; Déplacement tous les dixièmes de seconde

  Set timer to 0   ; Réinitialisation du timer



;       ----------------------------------------------
;      |    Déplacement de l'objet selon un cercle    |
;       ----------------------------------------------

  Set test to ( 0.707 * rayon )     ; Calcul de modeX selon l'endroit du cercle où on se trouve
  Set test2 to ( posY - oriY )
  if ( test2 < 0 )
   Set test2 to ( -1 * test2 )
  endif
  if ( test2 > test )
   Set modeX to 1
  else
   Set modeX to 0
  endif

  if ( modeX == 1 )

   if ( sensX == 0 )       ; Déplacement de l'objet sur l'axe x selon la valeur de sensX
     Set posX to ( posX - 1 )
   else
     Set posX to ( posX + 1 )
   endif
   SetPos x posX

   Set posY to ( ( rayon * rayon ) - ( ( posX - oriX ) * ( posX - oriX ) ) )   ; Calcul de posY et déplacement
    if ( posY < 0 )
     Set posY to 0
   else
     Set posY to ( GetSquareRoot, posY )
   endif
   if ( sensX == 0 )
     Set posY to ( -1 * posY )
   endif
    Set posY to ( posY + oriY )
   SetPos y posY

  else

   if ( sensY == 0 )       ; Déplacement de l'objet sur l'axe y selon la valeur de sensY
     Set posY to ( posY - 1 )
   else
     Set posY to ( posY + 1 )
   endif
   SetPos y posY

   Set posX to ( ( rayon * rayon ) - ( ( posY - oriY ) * ( posY - oriY ) ) )   ; Calcul de posX et déplacement
   if ( posX < 0 )
     Set posX to 0
   else
     Set posX to ( GetSquareRoot, posX )
   endif
   if ( sensY == 1 )
     Set posX to ( -1 * posX )
   endif
   Set posX to ( posX + oriX )
   SetPos x posX

  endif


  if ( posY > oriY )    ; Recherche du sens de déplacement selon les axes x et y
   Set sensX to 1
  else
   Set sensX to 0
  endif

  if ( posX > oriX )
   Set sensY to 0
  else
   Set sensY to 1
  endif


;       ---------------------------------------------
;      |    Recherche de l'orientation de l'objet    |
;       ---------------------------------------------


  if ( sensX == 1 )    ; Recherche de l'angle qu'on souhaite voir l'objet atteindre
   if ( sensY == 1 )
     if ( modeX == 1 )
       Set angle to 270
     else
       Set angle to 225
     endif
   else
     if ( modeX == 1 )
       Set angle to 315
     else
       Set angle to 0
     endif
   endif
  else
   if ( sensY == 1 )
     if ( modeX == 1 )
       Set angle to 135
     else
       Set angle to 180
     endif
   else
     if ( modeX == 1 )
       Set angle to 90
     else
       Set angle to 45
     endif
   endif
  endif

  if ( nen == 1 )     ; Initialisation de l'angle de départ (évite un objet qui tourne sur lui même au début)
   if ( angle >= 45 )
     Set angle to ( angle - 45 )
     SetAngle z angle
     Set angle to ( angle + 45 )
   else
     SetAngle z 315
   endif
   Set nen to 2
  endif

endif

End

Je me serais battu pour le faire marcher, celui là ! ;)
Nenfëa

- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!

Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!

Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !

#13 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 28 août 2005 - 02:08

Les secrets de la zone Result des dialogues

Voilà, j'ai decouvers quelque chose qui semble utilisé par des moddeurs outre atlantique et outre manche mais pas par nous les Français... Ou en tout cas je ne l'ai vu sur aucun tuto ni sur wiwiland...

Il s'agit de quelque chose de tres puissant :

Les scripts lancés via la zone Result d'un dialogue type Voice est un script ciblé sur celui qui a prononcé ce dialogue.

Exemple : je modifi le dialogue type voice " abreger un peu" de Fargoth en mettant dans Result :
StartScript "ByeBye"

begin ByeBye

SetHealth 0
StopScript ByeBye

end

Des que Fargoth dira " abreger un peu", sa santé passera à 0 alors que "SetHealth 0" na pas de cible !!!

A exploiter...

EDIT, ca doit sans doute marcher avec tous les dialogue, mais j'ai pas testé...

Modifié par Fandorn Delavie, 28 août 2005 - 11:10.

Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)

#14 dededos

dededos

Posté 28 août 2005 - 10:38

D'un autre coté c'est beaucoup plus simple de juste mettre un SetHealth 0 dans le Result du dialogue...


Bon après si le script deviens compliqué, on peut utiliser cette technique... mais je doute que ce soit si utile !

:)


Edit :
à Fandorn :
dans ce cas, on va dire que moi aussi c'était une astuce pour dire qu'on a pas forcément besoin d'un script.  :)

Modifié par dededos, 28 août 2005 - 10:51.

"Wrong, Do it again!"
"If you don't eat yer meat, you can't have any pudding. How can you have any pudding if you don't eat yer meat?"
"You! Yes, you behind the bikesheds, stand still laddy!"

--------------------

Membre des Fervents Partisans de l'Immuabilité Avatarienne!

#15 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 28 août 2005 - 10:48

@ dededos :
Oui, l'exemple n'illustre pas les possibilité de cette astuces, mais en montre le fonctionnement...
Le principe est d'ailleur le meme.
SetHealth n'a  pas de cible et pourtant le PNJ qui parle est quand meme pris pour cible...
L'avantage du script est qu'il permet d'en mettre beaucoup plus...

Modifié par Fandorn Delavie, 28 août 2005 - 11:00.

Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)

#16 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 28 août 2005 - 11:04

Utilisation de GetArmorType

GetArmorType ne fonctionne pas dans un if, il faut utiliser une variable global intermediaire ( on voit pourtant souvent des exemple comme ca, y compris dans le tuto )

if ( player->GetArmorType, 1 == 2 ) renverra toujours vrai... quelque soit le type d'armure porté...

il faut donc faire :
Set Armure to ( player->GetArmorType, 1 )
puis faire le test sur la variable intermediaire :
if ( Armure == 2 ) ...

Modifié par Fandorn Delavie, 28 août 2005 - 11:05.

Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)

#17 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 28 août 2005 - 11:08

Un truc évident sur les scripts ciblés

Si dans un script ciblé a un objet "MonObjet" vous faites
StartScript "LeScript"
Et bien le script "LeScript" sera lui aussi un script ciblé a "MonObjet"
C'est théoriquement évident mais on n'y pense pas toujours...

Modifié par Fandorn Delavie, 28 août 2005 - 11:11.

Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)

#18 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 28 août 2005 - 11:21

Korfandar, le 24.03.2004 à 11:14, dit :


[*]Nombre aléatoire entre les valeurs de deux variable a et b


Comme la fonction random n'accepte pas de variable comme paramètre, pour obtenir un nombre aléatoire entre deux bornes variables a et b, la bonne formule est :
set nombre to a + (((b - a) * ( random, 1000 ))/ 1000)
OU
set nombre to (1000 * a + ((b - a) * (random, 1000 ))) / 1000

<{POST_SNAPBACK}>


Il est là aussi conseillé de passer par une variable intermédiaires "Temp"...

set Temp ( random, 100 )
set nombre to a + (((b - a) * Temp )/ 1000)
J'ai fais l'essais sans la variable intermediaire et ca ne marche pas...
La fonction Random demande l'exlusivité et n'aime pas etre mélangé à d'autres calculs  :)

De plus, Random revoie des valeurs de type short il me semble, donc <256...

Modifié par Fandorn Delavie, 28 août 2005 - 11:23.

Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)

#19 a3jv

a3jv

    ... à 4 je reviens.


Posté 28 août 2005 - 15:02

Fandorn Delavie, le 28.08.2005 à 03:08, dit :

Les secrets de la zone Result des dialogues

Voilà, j'ai decouvers quelque chose qui semble utilisé par des moddeurs outre atlantique et outre manche mais pas par nous les Français... Ou en tout cas je ne l'ai vu sur aucun tuto ni sur wiwiland...

Il s'agit de quelque chose de tres puissant :

Les scripts lancés via la zone Result d'un dialogue type Voice est un script ciblé sur celui qui a prononcé ce dialogue.

Exemple : je modifi le dialogue type voice " abreger un peu" de Fargoth en mettant dans Result :
StartScript "ByeBye"

Si c'est utilisé mais plus souvent en 'result' de greeting ou topic.
Je l'utilise personnellement pour lancer des scripts globaux pour un compagnon genre lieux de téléportation, actions particulières à effectuer occasionnellement, etc. Donc en résult je passe une variable à X et je lance le script qui vérifie et exécute les lignes correspondant à la valeur donnée à la variable.
C'est automatiquement ciblé, donc inutile de mettre l'ID du NPC dans le script.
Ca peut être très utile pour faire un script utilisable par Plusieurs NPC et c'est sûrement utilisé dans Dracandros Voice pour les téléportations des Mercenaires qui peuvent ainsi utiliser le même script.

Le fait que c'est ciblé sur le NPC du result est signalé dans "Morrowind Scripting for Dummies", si ma mémoire est bonne.
Les choses n'ont que l'importance ou la valeur qu'on leur donne.

#20 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 29 août 2005 - 08:52

En effet, apres relecture, mais ce n'est pas dit clairement...
Je n'ai moi même pas compris tout de suite -( tjrs pas en fait )

Citation

Un script ciblé peut être démarré à partir d’un dialogue générique par un PNJ générique. Ainsi vous pouvez écrire un dialogue pour parler de "Croisés" et démarrer le script à partir de là, quelque soit l’identifiant du PNJ. (cela autorise de nombreuses situations intéressantes).

Pour un scripteur debutant, la comprehention n'est pas forcement evidente.
Mais quand on dit  " Tout fonction executé dans la zone resulte ( y compris StartSCript ) est ciblé au PNJ qui prononce ce dialogue " , là, c'est clair :D

PS : Mais le tuto est vraiment super sinon !
Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)

#21 MysticalShadow

MysticalShadow

Posté 04 octobre 2005 - 18:01

J'ajouterais que ce genre de "script ciblés" fonctionnent tout comme des scripts globaux, et non pas locaux. Plus de possibilités, donc, mais faites attention à ne pas pomper trop de mémoire!

#22 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 17 février 2006 - 01:17

Apres mes derniers essais, un script ciblé ne peux etre lancé que sur 1 cible à la fois ;)
Par contre , une cible peut avoir autant de scripts ciblés differents que necessaire :)
Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)

#23 Not Quite Dead

Not Quite Dead

    Rincevent


Posté 30 août 2006 - 09:02

Une feinte avec Cast.


Il me semble que cette information n'est pas encore répertoriée, aussi espéré-je qu'elle soit exacte :? :


:grin: Selon toute apparence, la fonction "Cast" ne peut avoir pour cible que des PNJ/Créatures uniques.


Un de mes scripts me faisait de méchants retours windows jusqu'à ce que je transforme la cible du sort en PNJ unique, et depuis, tout roule; donc si vous voulez vous économiser du temps des cheveux et de l'énergie... ;)

Si ce que j'ai dit est une trivialité, je vous prie de bien vouloir m'en excuser. ;)

[edit suite à la précision d'Orann, en dessous.]Euh, oui, en effet. Il s'agit de Cast avec Tribunal. Merci de l'avoir signalé. :? [/edit]

Modifié par Not Quite Dead, 30 août 2006 - 10:26.

« I was a soldier! I killed people!
- You were a doctor!
- I had bad days! »
John Watson, en train d'étrangler Sherlock Holmes, Sherlock - A Scandal in Belgravia (2012)
---------------
Vous aussi rejoignez les Fervents Partisans de l'Immuabilité Avatarienne!
---------------
VGM impénitent (était-il besoin de le préciser?)
---------------
Paterfamilias niv.IV

#24 Orann

Orann

    Nérévarine de Pertevue


Posté 30 août 2006 - 10:11

J'apporte juste une petite précision: il s'agit en ce qui concerne ce que tu dis Not Quite Dead de la fonction Cast avec Tribunal requis (ou Bloodmoon).

;)  Dans la version Morrowind seul, Cast ne peut avoir pour cible que le joueur, même si il s'agit d'un sort personel.

ID->cast, "sort_ID", player

Le sort s'appliquera quand même au lanceur si c'est un sort personel, mais il faut absoluement mettre player pour cible.

Modifié par Orann, 30 août 2006 - 10:12.

Palme d'honneur 2010 pour le mod Archipel de Pertevue

Entamez votre voyage vers l'Archipel de Pertevue ! Test communautaire en cours.




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)