Probleme cinématique à la Baldur

Répondre
Partager Rechercher
Bonjour a tous

voila, j'essaye de faire une cinématique à la baldur's gate, le script se compile , j'ai vérifié 20 fois les tags, et rien a faire...

voila ce que je veux faire (pour l'instant) :

Le Pj passe sur un déclencheur, celui ci le fait marcher jusqu'à tel wp, le fait s'incliner (saluer). Le Pnj avance alors a tel wp, et sort des phrases. mon script est dans le OnEnter du déclencheur :

Code PHP:

void main()
{
object oPC GetEnteringObject();
object oGardak GetObjectByTag("GARDAK");
loçation lPC GetLoçation(GetObjectByTag("WP_ANIMPJ"));
location lGardak GetLocation(GetObjectByTag("WP_ANIMPNJ"));

    
AssignCommand(oPCClearAllActions());
    
AssignCommand(oPCActionForceMoveToLocation(lPC));
    
AssignCommand(oPCActionPlayAnimation(ANIMATION_FIREFORGET_BOW));
    
DelayCommand(0.2SetCommandable(FALSEoPC));

    
AssignCommand(oGardakClearAllActions());
    
AssignCommand(oGardakActionWait(3.0));
    
AssignCommand(oGardakActionForceMoveToLocation(lGardak));
    
AssignCommand(oGardakActionDoCommand(SetFacing(180.0)));
    
AssignCommand(oGardakActionWait(2.0));
    
AssignCommand(oGardakActionSpeakString("Blabla1"));
    
AssignCommand(oGardakActionWait(5.0));
    
AssignCommand(oGardakActionSpeakString("Blabla2"));
    
AssignCommand(oGardakActionWait(5.0));
    
AssignCommand(oGardakActionSpeakString("Blabla3"));
    
AssignCommand(oGardakActionWait(5.0));
    
AssignCommand(oGardakActionSpeakString("Blabla4"));
    
AssignCommand(oGardakActionWait(5.0));
    
AssignCommand(oGardakActionSpeakString("Blabla5"));
    
AssignCommand(oGardakActionWait(5.0));
    
AssignCommand(oGardakActionSpeakString("Blabla6"));
    
AssignCommand(oGardakActionWait(5.0));
    
AssignCommand(oGardakActionSpeakString("Blabla7"));
    
AssignCommand(oGardakActionWait(5.0));
    
AssignCommand(oGardakActionSpeakString("Blabla8"));
    
AssignCommand(oGardakActionWait(5.0));
    
AssignCommand(oGardakActionSpeakString("Blabla9"));
    
AssignCommand(oGardakActionWait(5.0));

    
DelayCommand(0.2SetCommandable(TRUEoPC));
    } 

Je sait, il est ptet pas très "beau" je débute.

je comprends pas du tout ou ca merde...
si quelqu'un pouvait eclairer ma lanterne ca serait génial

voila

merci d'avance
Ben ça ressemble quand même à un problème de tag... (t'aurais pas mis le resref par hasard... )
Non franchement je vois pas trop
Par contre, tu as fait une erreur : tu utilise mal tes delaycommand(), tes deux SetCommandable() seront presque simultanés.
voila, ça marche ^^

merci a toi

j'ai changé le tag ("GARDAK") , j'ai fais une mise a jour dans le script, j'ai allongé le deuxième delay et tout va bien... enfin presque...

après être allé a son wp, le pnj se retourne...

c'est un problème mineur, mais comme il s'adresse au joueur ça fait bizarre , car il lui tourne le dos
Il faut éviter les 95 DelayCommand ou AssignCommand, vraiment (ben alors Jedaï tu molis?) . Les variables vivantes sont copiées à chaque fois. Donc:

Code PHP:

void SignalAndRelease()
{
     
object oGardak GetObjectByTag("GARDAK");
     
SignalEvent(oGardakEventUserDefined(100));
     
SetCommandable(TRUEOBJECT_SELF);
}
void DoPCCommand()
{
    
location lPC =  GetLocation(GetObjectByTag("WP_ANIMPJ")); 
    
ClearAllActions();
    
ActionForceMoveToLocation(lPC);
    
ActionPlayAnimation(ANIMATION_FIREFORGET_BOW);     
    
ActionDoCommand(SignalAndRelease());    
    
SetCommandable(FALSEOBJECT_SELF);
}



void main()
{
    
object oPC GetEnteringObject();
    
AssignCommand(oPC,DoPCCommand());

et dans l'UDE (user defined event) de Gardak tu mets la série d'action que tu veux qu'il accomplisse:
Code PHP:

int nEvent GetUserDefinedEventNumber();
//d'autres événements
if(nEvent == 100)
{
    
location lGardak GetLocation(GetObjectByTag("WP_ANIMPNJ"));
    
ClearAllActions();
    
ActionWait(3.0);
    
ActionForceMoveToLocation(lGardak);
    
ActionDoCommand(SetFacing(180.0)); // j'ai un doute la dessus mais c'est à toi de voir...
    // etc 

EDIT: manquait un ActionDoCommand, celui du SetFacing, qui à mon avis te cause problème.
d'accord, je vais faire ça, mais j'aimerais d'abord comprendre certaine chose.

Si tu pouvais m'expliquer certaines petites choses, ce serait vraiment sympa, car je tient vraiment a comprendre l'utilité de ces choses.

Par exemple,
Code PHP:

void SignalAndRelease() 

Je ne sait pas quel est son utilité (car je ne l'ai jamais vu )

Idem pour

Code PHP:

DoPCCommand() 

ou

Code PHP:

SignalEvent(oGardakEventUserDefined(100)); 


et toutes ces petites choses que je n'ai jamais vu, et que j'aimerais découvrir

voila, donc si toi ou quelqu'un pouvait m'expliquer cela, ça serait vraiment encore plus chouette, car j'aime vraiment comprendre ce que je met dans mes scripts, plutôt que de m'en faire faire des quasi sur mesure ^^

merci
heu, juste une dernière chose, comme je suis super chiant et super exigeant () :

Y'a pas une commande qui permet de centrer l'écran sur tel ou tel PNJ ou sur le PJ?

Pour faire vraiment comme Baldur's Gate et donner du dynamisme aux dialogues un peu longs

Code PHP:

void SignalAndRelease() 

Bon j'ai pas trop de temps là mais ceci est une déclaration de fonction, pas un appel, cela sert à fabriquer une nouvelle fonction, le code en dessous entre les "{}" dit ce que fait la fonction quand on l'appelle. Cette syntaxe est dirextement dérivée du C. Je te conseille fortement d'aller voir les tutoriaux pour maîtriser tout cela.
DoPCCommand, même chose, sauf qu'elle était mal déclarée désolé...
SignalEvent, c'est un signal disant à un objet d'éxecuter le script qui se trouve dans son slot OnUserDefinedEvent, c'est fondamental dans NWScript, la aussi va voir les tutoriaux.
Pour centrer la caméra pas possible, elle sera toujours centrée sur le PJ, tu peux la faire pivoter par contre, ou faire disparaître le Pj;
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés