Page 1 sur 1
[SCRIPT] Immobilité PC pendant une animation
Posté : dim. 23 avr. 2017, 23:02
par Cocrane
Le groupe se retrouvera téléporté dans une autre carte.
Au départ de la carte, je lance l'animation de téléportation sur chaque créature.
Idem lorsque l'on arrive sur l'autre carte.
Le hic, c'est que les créatures peuvent bouger pendant l'animation qui dure quelques secondes.
Je pensais faire un CUTSCENE pour gérer le changement de carte.
Avez-vous un moyen plus simple?
Une CUTSCENE où les créatures changent de carte, ça fonctionne?
Cocrane
Posté : dim. 23 avr. 2017, 23:21
par Freddy_Gwendo
Yep !
Exemple tiré de la téléportation de mon groupe dans le Royaume de Diamant Éternel :
Code : Tout sélectionner
IF
tes conditions
THEN
RESPONSE #100
ClearAllActions()
SetInterrupt(FALSE)
SmallWait(5)
StartCutSceneMode()
CutSceneId(Player1)
CreateVisualEffectObject("SPPORTAL",Player1)
CreateVisualEffectObject("SPPORTAL",Player2)
CreateVisualEffectObject("SPPORTAL",Player3)
CreateVisualEffectObject("SPPORTAL",Player4)
CreateVisualEffectObject("SPPORTAL",Player5)
CreateVisualEffectObject("SPPORTAL",Player6)
Wait(2)
FadeToColor([30.0],0)
Wait(1)
EndCutSceneMode()
TextScreen("GWChap01")
SmallWait(1)
StartCutSceneMode()
CutSceneId(Player1)
LeaveAreaLUAPanicEntry("GW0000","Entry1",[0.0],4)
LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4)
ActionOverride(Player2,LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4))
ActionOverride(Player3,LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4))
ActionOverride(Player4,LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4))
ActionOverride(Player5,LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4))
ActionOverride(Player6,LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4))
Wait(1)
MultiPlayerSync()
SetInterrupt(TRUE)
FadeFromColor([30.0],0)
Wait(1)
EndCutSceneMode()
END
Tu peux changer LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4) par LeaveAreaLUA("GW0000","",[x.y],4)) avec [x.y] comme coordonnées.
Tu peux même zapper le second bloc
Code : Tout sélectionner
EndCutSceneMode()
TextScreen("GWChap01")
SmallWait(1)
StartCutSceneMode()
CutSceneId(Player1)
qui ne sert qu'à afficher un textscreen avant la téléportation dans l'autre carte.
Posté : lun. 24 avr. 2017, 21:29
par Cocrane
Ok, donc un changement de carte peut se faire dans un CUTSCENE.
Pour le changement de carte, je me contente en général du mot clé LeaveAreaLUA où je signale la coordonnée d'arrivée.
Je vois qu'avec
LeaveAreaLUAPanicEntry("GW0000","Entry1",[0.0],4)
LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4)
On arrive sur l'entrée spécifiée de la carte d'arrivée.
J'ai raté quelque chose?
Cocrane
Posté : lun. 24 avr. 2017, 21:39
par Freddy_Gwendo
Non, c'est la raison pour laquelle je t'ai indiqué les deux solutions. Si tu privilégies la version avec Entry, n'oublie-pas d'inclure ceci dans ton tp2 :
Code : Tout sélectionner
APPEND ~ENTRIES.2DA~ ~GW0000 1720.2676 * * * * * * * *~ UNLESS ~GW0000~
Posté : lun. 24 avr. 2017, 22:38
par Cocrane
Ok pour le APPEND.
La version sans me plait bien.
Le groupe n'est pas obligé d'être rassemblé. Si une personne arrive sur le Trigger, il est téléporté. Si un 2nd arrive, idem.
> Ca fonctionne bien
J'ai essayé de tester la présence des PLAYERS pour télécharger ceux qui sont sur la zone en une seule fois. Du coup, j'ai fragmenté la Cutscène en plusieurs tests successifs pour mais seul le premier test se déclenche.
// Début Cutscene
IF
Range([PC],3)
THEN
RESPONSE #100
Createcreature("MINSC",[-1.-1],10) // temoin
ClearAllActions()
//SetInterrupt(FALSE)
SmallWait(5)
StartCutSceneMode()
CutSceneId(LastTrigger)
FadeToColor([30.0],0)
SetGlobal("COM021_CS","COM021",1)
Continue()
END
// Gestion Player1
IF
Global("COM021_CS","COM021",1)
Global("COM021_P1","COM021",0)
Range(PLAYER1,3)
THEN
RESPONSE #100
SetGlobal("COM021_P1","COM021",1)
CreateVisualEffectObject("SPPORTAL",PLAYER1)
SmallWait(5)
ActionOvErride(LastTrigger,LeaveAreaLUA("COM023","",[1400.700],10))
Continue()
END
// Gestion Player2
IF
Global("COM021_CS","COM021",1)
Global("COM021_P2","COM021",0)
Range(PLAYER2,3)
THEN
RESPONSE #100
SetGlobal("COM021_P2","COM021",1)
CreateVisualEffectObject("SPPORTAL",PLAYER2)
SmallWait(5)
ActionOvErride(LastTrigger,LeaveAreaLUA("COM023","",[1400.700],10))
Continue()
END
// Fin Cutscene
IF
Global("COM021_CS","COM021",1)
THEN
RESPONSE #100
Wait(4)
SetGlobal("COM021_CS","COM021",0)
//SetInterrupt(TRUE)
FadeFromColor([30.0],0)
Wait(1)
EndCutSceneMode()
Createcreature("MINSC",[-1.-1],10) // temoin
END
Résultat: CUTSCENE lancée mais plus rien ne se passe ensuite.
Cocrane
Posté : mar. 25 avr. 2017, 07:00
par deratiseur
Et l'effet 165 "pause target" ? je l'utilise pour un objet qui fait arrêt du temps affectant aussi le lanceur, et il est utilisé à la base une seconde lors du lancement de "mains ardentes".
Tu pourrais affecter tes personnage avec un sort qui utilise cet effet pendant que le reste de l'animation est joué autour d'eux.
Posté : mar. 25 avr. 2017, 19:24
par Cocrane
Salut Dérat,
merci pour ton idée.
Je reformule:
- je lance l'effet pause sur un adapté. La créature ciblée ne fait plus rien.
- je lance l'animation téléportation sur la créature.
- la fin de pause arrive et l'animation est terminée.
Peux tu confirmer?
Cocrane
Posté : mar. 25 avr. 2017, 19:26
par Freddy_Gwendo
Coco, tu peux expliquer en détail ce qui se passe. Exemple : player1 passe sur le trigger, est téléporté dans la carte suivante. Quelle carte affiche le jeu ? Que se passe-t-il quand tu sélectionnes un autre perso (tu reviens sur la carte initiale ou pas), etc...
Par ailleurs, est-ce vraiment utile que tu sépares ton groupe pour ton scénario ? Si non, tu te compliques singulièrement la vie.
Posté : mar. 25 avr. 2017, 20:11
par Cocrane
Freddy,
seul le 1ier block du trigger se déclenche, soit:
[HTML]IF
Range([PC],3)
THEN
RESPONSE #100
Createcreature("MINSC",[-1.-1],10) // temoin
ClearAllActions()
//SetInterrupt(FALSE)
SmallWait(5)
StartCutSceneMode()
CutSceneId(LastTrigger)
FadeToColor([30.0],0)
SetGlobal("COM021_CS","COM021",1)
Continue()
END[/HTML]
Au bou d'un moment, l'écran n'est plus noir, les PNJ sont tj sur la carte d'origine et on est bloqué en mode Cutscene.
A voir, si c'est différent avec le code dans le script de la carte.
Ce n'est pas indispensable au niveau scénario mais c'est plus sympa. Donc je tente et je m'adapterai si je ne trouve pas.
Cocrane
Posté : mar. 25 avr. 2017, 20:25
par Freddy_Gwendo
Ça me semble normal puisque tu lances un CutScenemode sans le fermer.
Puisque tu crées MINSC comme un test, oublie-le.
Code : Tout sélectionner
IF
Range([PC],3)
THEN
RESPONSE #100
SetGlobal("COM021_CS","COM021",1)
Continue()
END
Puis lance tes autres blocs avec Global("COM021_CS","COM021",1).
Code : Tout sélectionner
// Gestion Player1
IF
Global("COM021_CS","COM021",1)
Global("COM021_P1","COM021",0) // Pas sûr que ce soit très utile à l'usage.
Range(PLAYER1,3)
THEN
RESPONSE #100
SetGlobal("COM021_P1","COM021",1) // id.
SetInterrupt(FALSE)
SmallWait(5)
StartCutSceneMode()
CutSceneId(Player1)
CreateVisualEffectObject("SPPORTAL",Player1)
Wait(2)
FadeToColor([30.0],0)
Wait(1)
LeaveAreaLUAPanicEntry("GW0000","Entry1",[0.0],4)
LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4)
Wait(1)
SetInterrupt(TRUE)
FadeFromColor([30.0],0)
Wait(1)
EndCutSceneMode()
END
Posté : mar. 25 avr. 2017, 21:50
par Cocrane
J'ai lu ton code.
Si j'ai plusieurs PC qui arrivent d'un coup sur le TRIGGER, d'après toi, ca va lancer des CUTSCENE en série ou en parallèle? Le parallèle étant mon plan A.
J'avais pris comme à priori que si un CUTSCENE est lancé, on ne peut pas en lancer un autre en même temps.
Cocrane
Posté : mer. 26 avr. 2017, 14:45
par deratiseur
Cocrane, l'effet pause à une durée que tu configure comme tu veux. Donc oui, tu peut "pauser" le personnage, le déplacer par script ou tu veux, et si tu peux qu'il recommence à bouger, cale la pause pour qu'elle soit arrêtée pile à ce moment. Si tu veux qu'il ne bouge toujours pas, cale la pause plus longue.
heu, ça fait 2 sujets traités différemment sur le même topic
ps : c'est la qu'on voit que je suis toujours aussi nul en coding -> j'utilise des solutions plus simpliste
Posté : mer. 26 avr. 2017, 23:50
par Cocrane
Salut Dérat,
que dire de quelqu'un qui est nul et dont l'idée est visiblement la meilleure.
L'avantage de ton idée est qu'il n'y a pas de Cutscène et que les autres personnages peuvent du coup vivre leurs vies. Ainsi les créatures sont déplacées selon leur présence à proximité du trigger déclenché.
J'ai commencé à tester l'idée hier et je viens de trouver un paramétrage qui me convient. Le sort lance:
- la pause
- l'animation
- le changement de carte (via un script déclenché avec l'effet changement de l'IA Script)
J'ai eu des difficultés avec la gestion de la zone pour faire téléporter l'ensemble des présents. (d'où le passage du script déplacement dans le sort lui même)
Je suis parti sur l'exemple du sort Boule de feu pour le paramétrage de la zone d'effet. Si je retire l'animation de la boule, une seule créature subit l'effet. Si je mets une animation comme celle de la dissipation de magie, l'effet de groupe "remarche".
Je ne capte pas la nécessité d'avoir une animation de zone. :-) Mais ce n'est pas bloquant.
En gros, ta solution me plait et ça marche.
Cocrane
Posté : jeu. 27 avr. 2017, 17:47
par Freddy_Gwendo
Fais attention à la gestion des persos sur plusieurs cartes.
Tu peux vite te retrouver avec du lag, le moteur tentant de gérer les actions de plusieurs persos et les ressources de plusieurs cartes. Le fichier MASTAREA.2da qui gère l'ordre de priorité des scripts de cartes les uns sur les autres peut très vite bloquer certaines actions.
Sinon, pour ton projectile, rien ne t'empêche d'utiliser un projectile "one target" sans zone et sans fichier bam associé : bref un projectile invisible.
Posté : jeu. 27 avr. 2017, 20:53
par Cocrane
Je ne maîtrise pas la gestion multicarte mais c'est noté pour le conseil sachant que l'on est sur un mod avec de nouvelles cartes. Du coup tout est à paramétrer.
Pour ton projectile invisible, il est dans la liste des animations?
Cocrane
Posté : jeu. 27 avr. 2017, 20:55
par deratiseur
Tous les projectiles INAREA sont des projectiles de zone invisibles :
INAREA, invisible sur 10 mètres
INAREANS, invisible sur 10 mètres, ignore le centre (par exemple pour un sort qui génère des effets autour du lanceur, ça permet de lancer le sort sur le lanceur, mais lui même n'est pas affecté par le sort)
INAREANP, invisible sur 10 mètres, ne cible que les ennemis, ignore les cibles amicales
INAREAPA, invisible sur 10 mètres, ne cible que les cibles amicales, ignore les ennemis
INAREASM, invisible sur 3 mètres
Pratique : pour avoir un sort de zone invisible qui cible toutes les cibles amicales sur 60 mètres, simplement patcher le projectile INAREAPA en changeant la rayon de la zone : WRITE_LONG 0x204 512 WRITE_LONG 0x206 512
Un sort qui repousse tout ceux sur trois mètres autour du lanceur ? (en invisible, donc, même s'il est plus cool de jouer une anim) : soit :
patcher INAREANS en WRITE_LONG 0x204 80 WRITE_LONG 0x206 80 (rayon = 3m)
patcher INAREASM avec WRITE_BYTE 0xc (THIS | 16) (cad cocher l'option "ignore center")
Posté : ven. 28 avr. 2017, 19:20
par Cocrane
Freddy, Dérat,
je note dans vos retours la possibilité d'utiliser un projectile de zone invisible.
Par contre, je ne maîtrise pas ce domaine même avec vos commentaires.
Moi, je vais sur DLTCEP \ Spell et je sélectionne l'animation projectile que je veux associer au sort.
Est qu'il y a un projectile qui correspond à mon besoin dans la liste?
ou faut il que j'en modifie / créé un comme le suggère Dérat.
Cocrane