Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

deplacement controle

Par daemogorgon le 23/1/2003 à 11:16:50 (#3082493)

Qqu'1 peux me dire pourquoi l'avant derniere commande ne marche pas ? (le script est mis sur le onenter d'un declencheur)


void main()
{
object oPNJ = GetNearestObjectByTag("Garde");
object oPJ = GetEnteringObject();
object oPorte = GetNearestObjectByTag("po_gardee");
object oDepart = GetObjectByTag("WP_Garde1") ;
object oArrive = GetObjectByTag("WP_Garde2") ;
vector vPJ = GetPosition(oPJ);

if (GetIsPC(oPJ) == TRUE)
{

DelayCommand(0.1, AssignCommand(oPorte, ActionLockObject(oPorte)));
DelayCommand(0.2, AssignCommand(oPNJ, ActionForceMoveToObject(oArrive)));
DelayCommand(1.3, AssignCommand(oPNJ, SetFacingPoint(vPJ)));
}
}

Par eMRaistlin le 23/1/2003 à 12:12:08 (#3082923)

Honnetement, je ne sais pas trop pourquoi ca ne marche pas, mais je te conseille :

- Mettre le calcul de [vector vPJ = GetPosition(oPJ);] en DelayCommand, afin que sa position ne soit calculé qu'en temps voulu (et pas immediatement a l'entrée... surtout si c'est une entrée d'aréa et non de trigger)

- Essayer de mettre un ClearAllAction juste avant le SetFacingPoint... des fois qu'il ne le fasse pas a cause ForceMove...

- Au pire, faire un start conversation avec un resref de conversation erroné, ce qui va avoir le même effet que l'effet attendu : le PnJ va faire face au PJ automatiquement.


Voila... desole de pas avoir de reponse plus precise, mais bon...
(en tout cas, a priori, pas de bug repertorie sur le SetFacingPoint() sur le lexicon... ca doit nouiller ailleurs)

Par daemogorgon le 23/1/2003 à 12:15:49 (#3082955)

euh, je me suis mal exprimé.
C'est le ActionForceMove qui marche pas. Le pnj est assis sur une chaise, et quand le PJ passe sur le trigger, il doit se lever et aller à oArrive, mais là, il bouge pas, il se contente de regarder passer le PJ.

Par eMRaistlin le 23/1/2003 à 12:21:19 (#3083001)

ok... c'est normal, alors... il est dans une animation en boucle.


Assign un ClearAllActions, pour que le PNJ se leve...
il fera le reste ensuite, normalment :)

Par daemogorgon le 23/1/2003 à 12:26:32 (#3083035)

Ca marche, merci.

Par daemogorgon le 23/1/2003 à 21:58:33 (#3087605)

Comprend pas pourquoi ça marche pas!
Ce script sert a plusieurs endroits en fonction du nPnj.
La case 0 marche (quand le PJ passe dans un trigger), mais quand j'appelle de nouveau le script a la fin du dialogue du Pnj dans action conséquente... (case1), ben, y'a rien qui se passe.
Dans la foulée, y'a moyen de forcer le Pnj à garder la porte, et non se promener vers le PJ si celui-ci lui parle ?


void main()
{
object oPNJ = GetNearestObjectByTag("PNJ");
int nPnj = GetLocalInt(oPNJ, "place");
object oPJ = GetEnteringObject();
object oPorte = GetNearestObjectByTag("porte");
object oDepart = GetObjectByTag("WP_PNJ1") ;
object oArrive = GetObjectByTag("WP_PNJ2") ;

nPnj += 0;

switch (nPnj)
{
case 0:
if (GetIsPC(oPJ) == TRUE)
{
// Deplacement du Pnj et bloquage de la porte
nPnj = 1;
SetLocalInt(oPNJ, "place", nPnj);

AssignCommand(oPNJ, ClearAllActions());
DelayCommand(0.1, AssignCommand(oPorte, ActionLockObject(oPorte)));
DelayCommand(0.2, AssignCommand(oPNJ, ActionForceMoveToObject(oArrive)));

// Debut du dialogue du Pnj
DelayCommand(2.8, AssignCommand(oPNJ, ActionStartConversation(oPJ)));
}
break;
case 1:
// Deplacement du Pnj vers sa chaise
AssignCommand(oPNJ, ClearAllActions());
DelayCommand(0.1, AssignCommand(oPorte, ActionUnlockObject(oPorte)));
DelayCommand(0.2, AssignCommand(oPNJ, ActionForceMoveToObject(oDepart)));
DelayCommand(2.5, AssignCommand(oPNJ, ClearAllActions()));
// Fais s'asseoir le PNJ
nPnj = 0;
SetLocalInt(oPNJ, "place", nPnj);
pnj_assis(oPNJ);
break;
}
}

Par Azrael07 le 23/1/2003 à 22:12:54 (#3087697)

c étrange. A vue de nez comme ca, je pense qu'il doit entrer dans la case 1 sans problèmes.....

essaye de mettre des fonctions de debugging un peu partout pour tester ou il va pas....

affiche la valeur de nPnj un peu partout par exemple.


je crois que je vais sortir un tut sur le debugging un de ces 4, j'ai l'impression que ca se fait sentir ^^

bon si après ca tu trouve tjrs pas repost je vais voir si j'en trouve un peu plus ^^

Par daemogorgon le 23/1/2003 à 22:22:30 (#3087751)

ecoutes, j'ai déjà essayé de debugger un peu partout.
J'ai l'impression qu'à la fin du dialogue, il ne va pas dans le script, mais je vois pas pourquoi. Peut-être à tout hazard, le dialogue fini sur le [propriétaire] Pnj.
Sinon, je vois pas.
La valeur nPnj est bonne, elle change quand il faut (enfin, elle passe de 0 à 1).
Par contre, comme le dialogue est lancé dans le script, le pb ne serait pas là des fois ?

Par eMRaistlin le 23/1/2003 à 23:49:00 (#3088218)

Je comprends pas ton nPnj += 0;

A quoi sert t'il ?

Par daemogorgon le 24/1/2003 à 10:03:57 (#3089752)

pour nPnj +=0, avant le premier SetLocal, la variable est indéfinie (si je n' m'abuse), donc je la défini égale à 0 (si c'est le cas) ou sinon égale à sa valeur.

Par contre, personne a une idée du pb ?

Par eMRaistlin le 24/1/2003 à 10:14:21 (#3089801)

Dans le case 0, tu met nPNJ = 1, et dans le case 1, tu nPNJ = 0

pour moi, il execute Case 0, met la variable a 1, et donc effectue le case 1. (et remet donc NPJ a 0)

essaye :

Soit de refaire un GetNearestObject(oObject,nNth) au debut du Case1, ou bien essaye de changer la variable du nPnj en fin de script seulement.


PS : met des AssignCommand(oPnj,SpeakString("yo !")); dans les 2 case, pour voir quiquic'est qui fé quoi....

Par daemogorgon le 24/1/2003 à 11:36:30 (#3090238)

A première vue, j'en viens à me dire que le "action conséquente ..." de la fin du dialogue ne marche pas ! :eek:

Comprends plus rien.

Par eMRaistlin le 24/1/2003 à 11:44:12 (#3090281)

ah... au fait...

je ne t'ai pas demandé... (paske a la fin, on croit que tout le monde sait...)


A tu bien enlevé le ClearAllActions() que Bioware nous a bien mis gentiment a la fin des dialogues, par defaut?

A la fin de chaque dialogue, il y a un ClearAllAction()

*je le dis pas contre toi, demon, je le surligne paske c'est un pb recurrent qu'on oublie tt le temps ^^*


/me se le grave au fer rouge sur la peau, histoire de pas l'oublier la prochaine fois :monstre:

Par daemogorgon le 24/1/2003 à 11:54:23 (#3090358)

Ben t'as raison, je savais pô.

Par contre, il est où ce ClearAllActions() à faire sauter ?

Par eMRaistlin le 24/1/2003 à 12:27:18 (#3090597)

Dans les onglet de fin de conversation... (j'ai plus le nom en tete)

Par daemogorgon le 24/1/2003 à 12:43:58 (#3090695)

Dans un onglet (Fichier actuel) , j'ai "2.normales" et "abandon" avec le script "nw_walk_wp" dans chacun.
C'est ça ?
parcequ'il n'y a pas de ClearAllActions dedans !

Par eMRaistlin le 24/1/2003 à 12:57:34 (#3090793)

Ca doit etre ca... :)

Personnelement, je fais des delaycommand dnas mes dialogues, pour l'eviter...

Je sais que le ClearAllActions de Bioware est prevu suite aux demandes des joueurs pour qu'un pnj reprenne le walkwaypoint apres un dialogue.

Je suppose donc que oui, cela vient du "nw_wlk_wp" (ou walk_waypoint, comme tu l'aura deviné ^^)

Essaye sinon, de mettre des delay command plus important, dans ton case1
(essaye avec 10sec, puis reduit, au fur et a mesure...)

Par daemogorgon le 24/1/2003 à 17:27:01 (#3092575)

Je sais maintenant pourquoi y'a pb, mais ... je vois pas comment le régler. :enerve:

A première vue (ainsi qu'à seconde vue !) , la première fois que le PJ rentre dans le trigger, le script est lancé deux fois, mais je ne vois pas par quoi :confus:
Donc, la variable d'état me donne chaque fois le contraire de l'existant.

Est ce que qq1 à 1 idée pourquoi le script il est lancé deux fois... avant que je le lance, moi, à la poubelle....

Par eMRaistlin le 24/1/2003 à 17:49:45 (#3092750)

ta fonction "pnj_assis(oPNJ);", elle fait quoi ?


Sinon, pour repondre a ta question, je vais retenter ca :

Dans le case 0, tu met nPNJ = 1, et dans le case 1, tu nPNJ = 0

pour moi, il execute Case 0, met la variable a 1, et donc effectue le case 1. (et remet donc NPJ a 0)

essaye :

Soit de refaire un GetNearestObject(oObject,nNth) au debut du Case1, ou bien essaye de changer la variable du nPnj en fin de script seulement.


PS : met des AssignCommand(oPnj,SpeakString("yo !")); dans les 2 case, pour voir quiquic'est qui fé quoi....

JOL Archives 1.0.1
@ JOL / JeuxOnLine