La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 27/11/2024 17:17:42


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 14/03/2003 23:19:03 Sujet du message : Taille d'une area

Salut tout le monde.

Dites, vous savez pas si y a une fonction qui donne la taille d'une area ? C'est pour générer un vecteur aléatoire : je voudrais connaître la taille de la zone pour ne pas que mes vecteurs dépassent cette taille en question Surprised
_________________
» Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine
» 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 15/03/2003 00:50:46 Sujet du message :

Voici une solution que j'ai imaginé dont je ne peux malheureusement garantir le fonctionnement absolu. Car après observation, il semble bien que la valeur 519 renvoyée par GetTileSourceLight1 lorsqu'on se trouve aux dela des coordonnées limites d'une zone soit une constante. Mais ce n'est qu'une observation et non une démonstration. Donc, il faudra sans doute le tester pour différent Tilseset et réglage pour être sur.
A noter que la taille retournée est en Tile (32x32 étant le maximum) et ne tient nullement compte de l'occupation.
Voici deux fonctions, l'une pour la taille en X et l'autre pour la taille en Y. Si on veux avoir la taille de la zone en unité de mesure des vecteurs de "location", il suffit de multiplier par 10.

Code :

int GetAreaXDim(object oArea)
{
  int nX;
  int nEnd;
  location lLoc;
  vector vPos;
  nEnd=FALSE;
  while ((nX<=31) && (!nEnd))
  {
    vPos=Vector(IntToFloat(nX), 0.0, 0.0);
    lLoc=Location(oArea, vPos, 0.0);
    int nCol=GetTileSourceLight1Color(lLoc);
    if (nCol==519)
    {
      nEnd=TRUE;
      nX--;
    }
    else
    {
      nX++;
    }
  }
  return nX+1;
}

int GetAreaYDim(object oArea)
{
  int nY;
  int nEnd;
  location lLoc;
  vector vPos;
  nEnd=FALSE;
  while ((nY<=31) && (!nEnd))
  {
    vPos=Vector(0.0, IntToFloat(nY), 0.0);
    lLoc=Location(oArea, vPos, 0.0);
    int nCol=GetTileSourceLight1Color(lLoc);
    if (nCol==519)
    {
      nEnd=TRUE;
      nY--;
    }
    else
    {
      nY++;
    }
  }
  return nY+1;
}


Merci de me rapporter le moindre problème. Comme j'en fais usage, je suis forcément intéressé Mr. Green
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 15/03/2003 01:56:46 Sujet du message :

C'est bonnard, ça fonctionne impeccable. Bravo à toi, c'était plutôt futé de penser à cette astuce pour calculer la taille de l'area Razz Smile

Je te tiens au courant si je constate de possibles aménagements.
_________________
» Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine
» 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
DarkWolf(Pg)
Acolyte
Inscrit le: 20 Aoû 2003
Messages: 33
Répondre en citant
Posté le : 23/08/2003 11:19:50 Sujet du message :

Je cherche aussi à connaitre la taille de la zone pour générer un verteur aléatoire. Comme d'habitude j'ai bidouiller un truc puis cherche à l'améliorer (ou refaire intégralement) via l'expérience de d'autre personne.

Tu dis : "Si on veux avoir la taille de la zone en unité de mesure des vecteurs de "location", il suffit de multiplier par 10.", est ce que tu pourrasi me dire pourquoi ?

Je vais essayer d'améliorer ma sauce en multipliant par 10 (si jamais ça marche ça ne rameras pas du tout, et posterait ici mon astuce).
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
DarkWolf(Pg)
Acolyte
Inscrit le: 20 Aoû 2003
Messages: 33
Répondre en citant
Posté le : 23/08/2003 13:52:53 Sujet du message :

En fait j'ai trouvé comment faire mes vecteurs aléatoire sans ramer (celà dit l'astuce est beaucoup moins belle et universelle que le script de landraste).
En fait je cré un objet de tag "Centre" (genre les papillons c'est petits et discret) que je place au centre de la zone, je récupère sa position et double les coordonnées en abscisse et ordonné (vu qu'il est au centre, la carte est 2 fois plus grande).

Code :

void main(){
    object oCentre= GetObjectByTag("Centre");
    object oArea= GetArea(oPlayer);
    vector vCentre= GetPosition(oCentre);

    float x= IntToFloat(Random(FloatToInt(2.0 * vCentre.x)));
    float y= IntToFloat(Random(FloatToInt(2.0 * vCentre.y)));
    vector vRand= Vector(x, y, vCentre.z);


P.S. Si j'en ai besoin pour plusieurs zone de même tag, un seul objet centre suffit, sinon avec quelques test entre l'aire courrante et celle de l'objet devrait suffire à trouver le "bon centre"
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 23/08/2003 22:48:49 Sujet du message :


DarkWolf(Pg) a écrit :
Tu dis : "Si on veux avoir la taille de la zone en unité de mesure des vecteurs de "location", il suffit de multiplier par 10.", est ce que tu pourrasi me dire pourquoi ?
Tout simplement parce que mon système rapporte la taille en Tile composant la zone et qu'un Tile fait 10 x 10. Pour le vérifier, il suffit de balader ton curseur sur une zone en conception dans l'éditeur et suivre les indications de la barre de statut. Tu y verras défiler à la fois les coordonnées de location et les coordonnées de Tile (exprimées en rang et en colonne). Plus qu'une observation empirique, cette information figure aussi dans le Lexicon, mais je ne sais plus où.
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
DarkWolf(Pg)
Acolyte
Inscrit le: 20 Aoû 2003
Messages: 33
Répondre en citant
Posté le : 24/08/2003 00:02:10 Sujet du message :

Ok merci :>>
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Daermon
Légende vivante
Inscrit le: 07 Déc 2002
Messages: 356
Localisation: Près de 4-1
Répondre en citant
Posté le : 26/08/2003 18:37:17 Sujet du message :

Si il y avait un titre de meilleur scripteur du mois, Lendraste y serait tout le temps Laughing !
_________________
"Dans la vie, chacun prend son propre chemin. Mais en fin de compte, on se retrouve tous au même endroit..."
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 44.607ms