Bonjour,
Alors voilà, je fais pour mon propre usage un sort qui est censé placer un rocher sous le PJ et le faire monter jusqu'à un certain point (le rocher soulève alors le PJ).
Mon rocher, "CC_magicRockp", est donc en "reference persists", il est initialement placé à un endroit d'où je peux le surveiller pendant test, il monte correctement, mais ne se place pas sous le PJ : en fonction de la fonction utilisée pour le positionner, il disparaît ou ne bouge pas.
Voici le code, avec
Begin _CC_Global_EarthSpell ;Script global qui, quand le joueur lance le sort "Appel de roc", fait apparaître le rocher sous le sol ;Ensuite le rocher monte jusqu'à un certain point où il s'arrête. short progress short jpZ short jpX short jpY float timer if ( player->GetSpellEffects, "_CC_magie_terre" == 1 ) if ( progress == 0 ) (...) ;Vérification de si le PJ est en intérieur ou en l'air, ... else ;Si le PJ peut lancer le sort Set jpX to "player"->GetPos, x Set jpY to "player"->GetPos, y Set jpZ to "player"->GetPos, z Set jpZ to jpZ - 200 ;Ici, on active une seule des 4 méthodes séparées par une ligne vide ;CC_magicRockp->SetDelete 1 ;PlaceAtPC "CC_magicRockp" 1 1 1 ;CC_magicRockp->Position jpX, jpY, jpZ, 0 ;CC_magicRockp->SetDelete 1 ;PlaceItem "CC_magicRockp" jpX jpY jpZ 0 ;CC_magicRockp->SetPos x jpX ;CC_magicRockp->SetPos y jpY ;CC_magicRockp->SetPos z jpZ Set progress to 1 endif endif endif (...) ;Définition de ce qui se passe lorsque progress = -1 if ( progress == 1 ) Set timer to timer + GetSecondsPassed if ( timer < 3 ) CC_magicRockp->MoveWorld z, 100 Set jpX to CC_magicRockp->(GetPos x) Set jpY to CC_magicRockp->(GetPos y) Set jpZ to CC_magicRockp->(GetPos z) CC_magicRockp->SetDelete 1 PlaceItem "CC_magicRockp" jpX jpY jpZ 0 else Set progress to 0 Set timer to 0 endif endif end
Le rocher est censé se téléporter sous le joueur (ou en tout cas au niveau du joueur, juste pour des tests, à ajuster quoi) dans la première condition, vous l'aurez compris.
Ce script est un script global qui n'est donc attaché à rien, démarré à l'endroit d'obtention du sort.
Le rocher, lui, n'a aucun script attaché.
J'ai retenu 4 méthodes différentes pour téléporter le rocher sous le joueur mais aucune ne fonctionne correctement :
1) CC_magicRockp->SetDelete 1
PlaceAtPC "CC_magicRockp" 1 1 1
Avec cette méthode, le rocher initialement placé ne disparaît pas malgré le SetDelete 1, un nouveau apparaît sur le PJ et ne bouge pas, il est intangible.
2) CC_magicRockp->Position jpX, jpY, jpZ, 0
Avec cette méthode, le rocher initialement placé disparaît et rien ne réapparaît. La console ne me répond rien quand je lui demande la position de CC_magicRockp, bref, il a disparu.
3) CC_magicRockp->SetDelete 1
PlaceItem "CC_magicRockp" jpX jpY jpZ 0
Avec cette méthode, le rocher initial ne bouge pas, rien n'apparaît et le rocher initial monte. Si on est sur le rocher initial quand on lance le sort, il porte le PJ comme il faut.
4) CC_magicRockp->SetPos x jpX
CC_magicRockp->SetPos y jpY
CC_magicRockp->SetPos z jpZ
Avec cette méthode, enfin, le rocher initial disparaît et n'a plus de position, comme pour la 2).
Bref voilà, tout ça pour dire : "Môman, comment on fait pour déplacer un static sous le PJ ?"
Si vous avez des idées (solutions ?)... merci d'avance de les partager.
[EDIT : Sujet résolu, voir réponse numéro 4]
Modifié par Gilgamesh-, 29 août 2009 - 21:42.