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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Je ne capte pas pour un listing de toutes mes zones!

Par RAT le 20/12/2002 à 3:46:34 (#2837052)

J'ai créé 22 zones, et j'ai mis des waypoint du style AREA_01 --> AREA_22

Je fais une recherche de toutes mes zones pour qu'ils détectent mes waypoints.

Et pourtant , j'ai fais aussi un test pour savoir s'il détectait des waypoints invalide ou pas et il m'en détecte aucun.

Et pourtant, il m'en trouve que 18.
Alors la je ne capte pas du tout.

Je vous mets ma fonction pour que vous puissiez regarder :).



void list_zone(object ofirst,string swaypoint="AREA_")
{
int Count=0;
string sCount;
object otag;
object oPC = GetLastSpeaker();
object oarea;
string AreaName;


while (GetIsObjectValid(ofirst))
{

Count++;
if (Count < 10)
sCount="0" + IntToString(Count);
else
sCount= IntToString(Count);

otag=GetObjectByTag(swaypoint+ sCount);
oarea=GetArea(otag);
AreaName=GetName(oarea);
SetLocalString(oPC,"NOM_VILLE_"+sCount,AreaName);
SendMessageToAllDMs(sCount + " : " + AreaName);

ofirst=GetNextObjectInArea(otag);

}


}



Par eMRaistlin le 20/12/2002 à 10:02:55 (#2837802)

Tu veux dire qu'il te trouve 18 WP nvalide au moment ou tu fais un chk area, c'est ca ?

Genre un objet placé sur des arbres qui empeche de sauvegarder la zone ?

Pasque sinon, oui, c'est logique : c'est le placement de ton WP qui est invalide, pas le WP lui-meme. Donc le script ne detecte rien de particulier avec GetIsObjectValid, vu que le WP est un objet valid place a un endroit invalide.

Qui plus est, tu ne doit meme pas pouvoir faire un check de la posistion, car les coordonnes (85.0,85.0) sur une de jeu de 8*8 ne sont pas invalide... elle esont juste hors tile.

(mais si tu cree un monstre en (85.0,85.0), il se créera bien, mais sera invisible...) c'est un bug que j'ai rencontré. J'ai arrete les spawn a des position random a cause de ca.

Par RAT le 20/12/2002 à 10:48:39 (#2838084)

Tu veux dire qu'il te trouve 18 WP nvalide au moment ou tu fais un chk area, c'est ca ?


oui c'est tout à fait ça eM

Genre un objet placé sur des arbres qui empeche de sauvegarder la zone ?


Ba normalement, je vais quand même revérifier, mais mes emplacements pour mes objets sont valides, car quand je fais une vérification de la zone il me détecte aucune erreur.

Pasque sinon, oui, c'est logique : c'est le placement de ton WP qui est invalide, pas le WP lui-meme. Donc le script ne detecte rien de particulier avec GetIsObjectValid, vu que le WP est un objet valid place a un endroit invalide.


Il n'y a pas un moyen de détecter si l'emplacement est invalide excepté en faisant une vérification de la zone. Car c'est ce que j'ai fais, et il ne me détecte aucune erreur.
:(
grumph

Tu aurais un moyen eM???


Merci en tout pour ton aide!

Par eMRaistlin le 20/12/2002 à 11:12:03 (#2838219)

Bein, le moyen le plus simple que je connaisse, c'est de les prendre un par un (et vi !), et de les deplacer de 1millimetre. En general, s'ils sont bien places, ca change pas grand chose, mais s'ils sont mal placés, alors tu vois le WP qui disparait vers la position la plus proche stabl (mais pas forcement bonne...) .

Un fois que c'est fait, il ne te reste plus qu'a le remettre a l'endroit ou il etait, et normalement, lors d'un deplacement a la souris ulterieur a son placement, il gere mieux...


Va comprendre...

Par RAT le 20/12/2002 à 11:31:42 (#2838367)

Merci sincèrement eM, je vais essayer ce que tu viens de me proposer, on va bien voir.


Mais pour toi , c'est bien l'emplacement qu'ils doit trouver invalide et non mon code?


Bon allez zouu, je vais aller faire les tests, je vous préviendrai si c'est bon ou pas!

Par eMRaistlin le 20/12/2002 à 12:18:44 (#2838752)

C'est complique...

de ce que j'en sais, c'est l'emplacement, mais en fait il n'est pas totalement invalide... il est juste hors carte... donc le code est content, puisque ses donnes sont coherentes, mais le moteur du jeu l'est moins...

mais vu que le create est plus fort, il est possible de créer des objet a des position non valide.

Exemple :

Lors de mes testsur le detect Evil, voici ce que m'a donne un respawn aleatoire :


http://narf2.free.fr/emraistlin/MidgardShoot/bug/NWN0000.jpg

A noter que la zone de mer est intra-carte, et que le code de respawn etait correct... c'est juste que la seule zone de terre vaide de toute ma carte est la portion sur laquelle je suis.

Tu vois : la position est "Valide", mais l'emplacement non... donc impossible de tester la location...

voila, en esperant que cela t'eclaire... (meme si c'est tout ce que je peut faire)...

Par RAT le 20/12/2002 à 12:20:18 (#2838762)

J'ai fais un test, et en fait cela ne marche pas plus eM.

Par contre, un truc surprenant, c'est que suivant la zone ou je suis, il va m'en trouver moins ou sa totalité, c'est à dire 22.

Je ne comprends vraiement pas pourquoi?


*se tappe la tete contre le mur*:hardos: :confus: :confus: :monstre: :maboule:

Par RAT le 20/12/2002 à 12:22:59 (#2838796)

oui je commence à comprendre ce que tu veux me dire, et c'est une très bonne info pour des futurs problèmes comme celà.

Par RAT le 20/12/2002 à 13:50:10 (#2839544)

Arfff j'ai beau faire de multiple test, et rien toujours la même chose,

c'est que suivant la zone ou je suis, il va m'en trouver moins ou sa totalité( c'est à dire 22). C'est quand même étrange alors que je ne fais pas pourtant de GetNearest ou je ne sais quoi.


Maudit code!

Par RAT le 20/12/2002 à 19:26:35 (#2842251)

Je relance le post si cela ne vous dérange pas, car je ne trouve toujours pas donc si vous avez une idée je suis tout ouïe :):D

Par Jedaï le 20/12/2002 à 19:30:04 (#2842280)

Je comprend pas tout à ton script....:confus: Surtout je ne comprend pas le rôle de ofirst, et encore moins cette ligne :


ofirst=GetNextObjectInArea(otag);

N'est-ce pas ici plutôt oArea qu'il faudrait mettre (je sais pas j'ai pas Aurora sous les yeux).:doute:

Si j'ai bien compris le but de ton script, est-ce que ceci ne marcherait pas aussi bien, sinon mieux (si j'ai pas compris, je m'en excuse :o ) :


void list_zone(object ofirst,string swaypoint="AREA_")
{
int Count=0;
string sCount;
object oPC = GetLastSpeaker();
object oarea;
string AreaName;


while (GetIsObjectValid(ofirst))
{

Count++;
if (Count < 10)
sCount="0" + IntToString(Count);
else
sCount= IntToString(Count);

ofirst=GetObjectByTag(swaypoint+ sCount);
oarea=GetArea(ofirst);
AreaName=GetName(oarea);
SetLocalString(oPC,"NOM_VILLE_"+sCount,AreaName);
SendMessageToAllDMs(sCount + " : " + AreaName);

}

}

Par RAT le 20/12/2002 à 20:33:41 (#2842782)

en fait tu as dans un void main ce code là :


object otag=GetObjectByTag("AREA_01");
object ofirst=GetFirstObjectInArea(otag);
list_zone(ofirst);


puis la fonction



void list_zone(object ofirst,string swaypoint="AREA_")
{
int Count=0;
string sCount;
object otag;
object oPC = GetLastSpeaker();
object oarea;
string AreaName;


while (GetIsObjectValid(ofirst))
{

Count++;
if (Count < 10)
sCount="0" + IntToString(Count);
else
sCount= IntToString(Count);

otag=GetObjectByTag(swaypoint+ sCount);
oarea=GetArea(otag);
AreaName=GetName(oarea);
SetLocalString(oPC,"NOM_VILLE_"+sCount,AreaName);
SendMessageToAllDMs(sCount + " : " + AreaName);

ofirst=GetNextObjectInArea(otag);

}


}





En fait si j'ai bien compris, la commande GetFirstObjectInArea();
C'est qu'il va chercher dans la premiere area, le premier objet qu'il l'intéresse, ici c'est le waypoint qui va chercher.
Si l'objet est valide, il rentre dans la boucle, et il va ainsi de suite changer d'area, pour chercher le waypoint comportant le tag "AREA_X"
d'où otag =GetObjectByTag(swaypoint+ sCount);

oarea va me permettre juste de choper l'object area pour trouver son nom, et de pouvoir lister toutes mes zones.

Pour l'instant mon code marche très bien , à une exception prêt, c'est qu'il ne me trouve que 18 zones au lieu des 22 (donc 22 waipoints) . Et l'autre petit soucie qui est lié à mon avis à mon problème, c'est que si je change de zone, et que je relance le script, il va me trouver moins ou plus de zones, par exemple: sur une zone, il ne va m'en trouver que 5 et dans une autre les 22.
Ce que je ne comprends, c'est que dans mon code, il n'utilise en aucun cas la position du PC, et ni de son object, excepté de sauvegarder le résultat avec les SetLocal.
Voilà, j'espère que vous allez mieux me comprendre lol.
Mais c'est vrai que là, je n'arrive pas à comprendre.

Merci d'avance :):D:D

Par RAT le 20/12/2002 à 21:08:43 (#2843115)

j'ai résolu le problème :)
en fait , merci à jedaï, tu avais raison le GetFirstObjectArea ne sert à rien. donc faut le virer et juste le faire par
otag=GetObjectByTag(swaypoint+ sCount);

mais je vous mettrai le code quand je reviendrai, car là j'ai une partie de jeu de rôle à faire avec des potes :).

A très tôt demain matin :p

JOL Archives 1.0.1
@ JOL / JeuxOnLine