Jack Bauer, le 17.09.2008 à 16:18, dit :
oui merci
pour la teleportation c'est bon pour l'aller
c'est pour le retour que ca pose probleme
pour qu'il me renvoi d'ou je suis parti
faudrais je pose une ancre avant de se teleporter
Salut à tous !
Oui, il faut que tu places dans le monde un xmarker qui ne servira qu'à mémoriser l'endroit où était le PJ avant de se téléporter. Placé n'importe où avec le tescs, pas avec un PlaceAtme.
Avant la téléportation, dans ton script de téléportation, il suffit de : (tu as donné un nom à ce Xmarker : monXMarkerRef, ou ce que tu veux...)
Définir X1 Y1 Z1 comme
float !!!!
Set X1 to player.GetPos X
Set Y1 to player.GetPos X
Set Z1 to player.GetPos X
monXMarkerRef.SetPos X X1
monXMarkerRef.SetPos Y Y1
monXMarkerRef.SetPos Z Z1
Et pour le retour...
player.MoveToMarker monXMarkerRef.
Est-ce une réponse... ou je n'ai pas compris ton problème ?
A+
Pour le script :
Item dans un inventaire : attention ! Variables de script très volatiles !!!
En plus de l'astuce du Xmarker de retour mobile, voici une autre explication concernant les scripts sur les Items...
Un Item quand il est dans le monde (jeté, posé) a un identifiant... pas de problème (FormId de référence, éventuellement editorId de référence).
Mais quand il est dans un inventaire, il perd son ID... il n'a qu'un numéro de case dans l'inventaire (exploitable avec OBSE) et un identifiant d'objet de base... mais l'item a perdu son identité...
Dans le monde, il y aura par exemple deux pommes, la pomme n°1 avec ses valeurs de variables de script, et la pomme n°2 avec ses variables, chacune avec son ID1 et son ID2. Mais, si on les ramasse dans l'inventaire, il y aura 2 pommes indifférenciées dans l'inventaire qui auront perdu la mémoire.
D'ou le pb avec les scripts sur les items lorsqu'ils sont dans l'inventaire. On peut utiliser des variables dans le script, mais ce n'est utile que dans le temps de la frame ou il s'exécute. A la frame suivante, les variables sont perdues.
Cependant, pour les objets uniques comme par exemple LA bague Machin, il est possible d'utiliser des variables en dehors du script.... stocker les valeurs dans soit une variable globale, soit dans un script de quête... un script de quête peut très bien servir de réservoir de variables pour d'autres scripts !
D'où l'idée : une seule bague, mais une variable A dans le script de la quête MaQuete. (ou A variable globale, le principe est le même...)
Les règles :
Variables globales AnneauMaison ; AnneauEquipe
AnneauMaison = 0 : je suis dans le monde
AnneauMaison = 1 : je suis dans la maison
AnneauEquipe = 0 : non équipé de l'anneau (quest ou globale aussi)
AnneauEquipe = 1 : équipé de l'anneau
Ici, j'ai choisi des variables globales. Si variable de quête il faudrait les préfixer avec le nom de la quête dans le script :
MaQuete.AnneauMaison...
arciHbAnneauMaison est l'ID de base de l'anneau
arcWsmHuinNW est la ref du Xmarker dans la maison
MarkerRetour est la ref du Xmarker mobile.
X1, Y1, Z1 sont des float pour calculer la position du joueur. Pas besoin de globals, puisque sortis de la frame on s'en fiche des X1 Y1 Z1, le marker garde la position, lui ! Bien sûr à la frame suivante c'est zero... n'essayez pas d'améliore et de compter dessus, sauf si dans le monde... or là on est dans l'inventaire !!!
Mode d'emploi :
J'équipe l'anneau dans le jeu puis sors de l'inventaire... départ pour la maison !
J'équipe l'anneau dans le jeu puis sors de l'inventaire... retour au départ !
Scn AnneauMaisonScript
Float X1
Float Y1
Float Z1
Begin OnEquip player
Set AnneauEquipe to 1
End
Begin GameMode; marche dès que sors de l'inventaire...
If AnneauEquipe == 1
player.UnEquipItem arciHbAnneauMaison
Set AnneauEquipe to 0
If AnneauMaison == 0
Set X1 to player.GetPos X
Set Y1 to player.GetPos Y
Set Z1 to player.GetPos Z
MarkerRetour.SetPos X, X1
MarkerRetour.SetPos Y, Y1
MarkerRetour.SetPos Z, Z1
Set AnneauMaison to 1
player.MovetoMarker arcWsmHuinNW
Else
Set AnneauMaison to 0
player.MovetoMarker MarkerRetour
EndIf
EndIf
End