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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Le jeu plante, problème de scripts, EventsUser

Par MTorment le 9/11/2002 à 15:18:28 (#2519833)

Je suis encore une quiche en script, donc certains vont sûrement trouver des *saloperies* dans mes scripts. En général, j'arrive à me débrouiller seul, mais là avec les Events, je cale.

J'ai 2 zones.
-zone 1, c'est la zone où le PC apparaît:

=> OnEnter de la zone


void main()
{
object mere = GetNearestObjectByTag("mere");
object chaise = GetNearestObjectByTag("chaise1");
object moi = GetNearestObjectByTag("moi");
object wp1 = GetWaypointByTag("wp1");
object wp2 = GetWaypointByTag("wp2");
object porte1 = GetNearestObjectByTag("porte2");
object porte = GetNearestObjectByTag("porte1");
AssignCommand(mere, ActionSit(chaise));
ActionOpenDoor(porte);
ActionOpenDoor(porte1);
AssignCommand(moi, ActionMoveToObject(wp1, TRUE));
DelayCommand(5.0, AssignCommand(moi, ActionMoveToObject(wp2, TRUE)));
DelayCommand(8.0, SignalEvent(OBJECT_SELF, EventUserDefined(2002)));
}


=> OnUserDefined de la zone

void main()
{

if (GetUserDefinedEventNumber() == 2002){
object pere = GetNearestObjectByTag("pere");
object mere = GetNearestObjectByTag("mere");
object PC = GetFirstPC();
object wpz = GetWaypointByTag("wpzone2");
AssignCommand(pere, ActionMoveToObject(mere));
DelayCommand(1.0, AssignCommand(mere, ActionMoveToObject(pere)));
DelayCommand(15.0, AssignCommand(PC, ActionJumpToObject(wpz)));
}
}


-zone 2:
=> OnEnter de la zone

void VoidCreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE)
{
CreateObject(nObjectType,sTemplate, lLocation, bUseAppearAnimation);
}



void main()
{
object pere = GetNearestObjectByTag("pere");
object ancetre = GetNearestObjectByTag("ancetre");
object wp1 = GetWaypointByTag("wppart1");
object wp2 = GetWaypointByTag("wppart2");
object wp3 = GetWaypointByTag("wppart3");
object wpc1 = GetWaypointByTag("wpcree1");
object wpc2 = GetWaypointByTag("wpcree2");
object wpc3 = GetWaypointByTag("wpcree3");
object wpc4 = GetWaypointByTag("wpcree4");
object wpc5 = GetWaypointByTag("wpcree5");
location lwp1 =GetLocation(wpc1);
location lwp2 =GetLocation(wpc2);
location lwp3 =GetLocation(wpc3);
location lwp4 =GetLocation(wpc4);
location lwp5 =GetLocation(wpc5);
object jose = GetNearestObjectByTag("jose");
object wpent = GetWaypointByTag("wpentretient");
object mere= GetNearestObjectByTag("mere");
float fjose = GetFacing(jose);
AssignCommand(pere, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 2.0));
AssignCommand(ancetre, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 2.0));
DelayCommand(10.0, AssignCommand(pere, ActionMoveToObject(wp1)));
DelayCommand(15.0, AssignCommand(pere, ActionMoveToObject(wp2)));
DelayCommand(18.0, AssignCommand(pere, ActionMoveToObject(wp3)));
DelayCommand(20.0, VoidCreateObject(OBJECT_TYPE_CREATURE, "villageois", lwp1));
DelayCommand(20.0, VoidCreateObject(OBJECT_TYPE_CREATURE, "villageois1", lwp2));
DelayCommand(20.0, VoidCreateObject(OBJECT_TYPE_CREATURE, "villageois2", lwp3));
DelayCommand(20.0, VoidCreateObject(OBJECT_TYPE_CREATURE, "villageois3", lwp4));
DelayCommand(20.0, VoidCreateObject(OBJECT_TYPE_CREATURE, "villageois5", lwp5));
DelayCommand(22.0, AssignCommand(jose, ActionMoveToObject(wpent)));
DelayCommand(27.0, AssignCommand(mere, ActionMoveToObject(pere)));
DelayCommand(31.0, AssignCommand(mere, SetFacing(fjose)));
}


J'ai retiré tout les dialogues, je pense que c'est inutile pour corriger les scripts.
Les scripts se compilent, j'ai la version 1.26 fr.
Le PC apparaît dans la zone 1, mais rien ne se passe. Au bout de moins de 10s, le PC change de zone, et le jeu plante 2s après.

J'ai plutôt une bonne machine.

Merci pour votre aide.:merci:

Par Jedaï le 9/11/2002 à 15:51:18 (#2519930)

Avant même de regarder la suite, je dirai que je ne sens absolument pas les GetNearestObjectByTag() lancé par une zone, mais alors vraiment pas du tout. :doute:
J'ai l'impression que cette fonction est systématiquement utilisé par les newbie à la place de GetObjectByTag(), même lorsqu'elle est manifestement incorrecte comme ici : on peut même la trouver dans des Events de module !:enerve:
Personnellement j'ai aussi un doute sur l'utilisation de ActionOpenDoor()...(essaie plutôt de faire un assigncommand sur la porte).

Ensuite : systématiquement vérifier que l'objet entrant dans la zone est bien un PC, à ma connaissance les NPCs peuvent aussi déclencher le OnEnter (peut-être même lorsqu'ils spawn) .
Point de détail : essaie de garder les convention de nommage des variables : un o- pour les objets ne serait pas superflu.
Autre chose, pour la clarté du code : ta fonction VoidCreateObject est très bien, mais tant que tu y est et vu que tu ne l'utilise que pour ça et à un seul instant pourquoi ne pas la faire plutôt ainsi :


void VoidCreateObject()
{
CreateObject(OBJECT_TYPE_CREATURE, "villageois", lwp1);
CreateObject(OBJECT_TYPE_CREATURE, "villageois1", lwp2);
CreateObject(OBJECT_TYPE_CREATURE, "villageois2", lwp3);
CreateObject(OBJECT_TYPE_CREATURE, "villageois3", lwp4);
CreateObject(OBJECT_TYPE_CREATURE, "villageois5", lwp5);
}


Et mettre ensuite :


DelayCommand(20.0, VoidCreateObject());


au lieu de :


DelayCommand(20.0, VoidCreateObject(OBJECT_TYPE_CREATURE, "villageois", lwp1));
DelayCommand(20.0, VoidCreateObject(OBJECT_TYPE_CREATURE, "villageois1", lwp2));
DelayCommand(20.0, VoidCreateObject(OBJECT_TYPE_CREATURE, "villageois2", lwp3));
DelayCommand(20.0, VoidCreateObject(OBJECT_TYPE_CREATURE, "villageois3", lwp4));
DelayCommand(20.0, VoidCreateObject(OBJECT_TYPE_CREATURE, "villageois5", lwp5));


Encore une chose dont je ne suis pas sûr que tu sois conscient :


DelayCommand(31.0, AssignCommand(mere, SetFacing(fjose)));


Cette fonction ne va pas tourner "mère" vers "jose" mais va simplement lui ordonner de se tourner dans la même direction que "Jose", si c'est la première possibilité que tu veux faire il faudrait plutôt utiliser :


DelayCommand(31.0, AssignCommand(mere, SetFacingPoint(GetPosition(jose))));

Par MTorment le 9/11/2002 à 16:25:00 (#2520068)

Merci de t'intéresser à mon problème.:merci:

En effet, les Newbies ont tendance à utiliser des scripts et des fonctions déjà faites, ou qu'ils ont vu sur de nombreux scripts, le GetNearestObjectByTag est une de ces fonctions très souvent utilisées.;)
En fait, je pensais que le GetObjectByTag cherchait l'objet dans tout le module...

Seulement, j'avais oublié de précisé que justement, j'avais déjà essayé avec le GetObjectByTag.:D Confirmation : cela me fait exactement le même problème, excepté les portes qui s'ouvrent, j'ai suivi ton conseil du assigncommand.

Merci pour votre aide.:merci:

Par MTorment le 10/11/2002 à 12:16:15 (#2523740)

Donc, je voudrais savoir, en tenant compte des modifications de Jedaï, si mes scripts sont déjà bons et surtout pourquoi le jeu plante quand je teste, cela a un rapport avec les EventsUser mal placé dans mes scripts ?

Merci:merci:

Par MTorment le 12/11/2002 à 22:00:06 (#2547855)

UP ... pour ne pas sombrer dans l'oubli ... pour le moment

JOL Archives 1.0.1
@ JOL / JeuxOnLine