La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 22/09/2024 18:39:16


  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 : 03/04/2003 05:56:49 Sujet du message : Braséros allumés/éteints selon jour/nuit

Bonjour à tous !

J'aimerais mettre en place un script particulier : dans ma zone se touvent pas mal de braseros, et j'aimerais que lorsque la nuit arrive, les braseros s'éteignent, et inversement le jour, qu'ils s'allument (si si c'est logique, cherchez pas Very Happy).

Voilà ce que j'ai fait pour le moment sur le onHeartBeat de ma zone :
(il y a 35 braseros, dont les tags sont "Brasero_onoff")

Code :
void main()
{
object oBrasero = GetObjectByTag("Brasero_onoff", 35);

if ((GetIsNight() || GetIsDusk()) && (GetLocalInt(GetModule(), "Brasero_jour") != 1))
  {
  SetLocalInt(GetModule(), "Brasero_jour", 1);
  SetPlaceableIllumination(oBrasero, FALSE);
  RecomputeStaticLighting(GetArea(OBJECT_SELF));
  }

if ((GetIsDay() || GetIsDawn()) && (GetLocalInt(GetModule(), "Brasero_jour") != 2))
  {
  SetLocalInt(GetModule(), "Brasero_jour", 2);
  SetPlaceableIllumination(oBrasero, TRUE);
  RecomputeStaticLighting(GetArea(OBJECT_SELF));
  }

}


...mais évidemment si j'écris c'est que ça ne marche pas. Qqun pourrait-il m'aider ?

Et question subsidiaire, comme je voudrais utiliser cet effet dans plusieurs zones, comment pourrais-je faire pour utiliser ce script sur chq zone sans pour autant en faire un différent à chq fois (ou plus simplement, comment faire pour calculer le nb de braséros de la zone à l'entrée du joueur dans cette zone en question).

Merci et à +
_________________
» 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
 
Cassin
Papa-poule(t) & poissard intemporel
Inscrit le: 16 Sep 2002
Messages: 7471
Localisation: 6 bis rue de la Couveuse, Poulailler 39b
Répondre en citant
Posté le : 03/04/2003 07:16:10 Sujet du message :

Mmmm... Je n'ai pas vraiment le temps de regarder ce qui cloche dans ton script mais pour ta seconde question, il faut faire une boucle sur tous les objets de la zone.

Par exemple tu fais GetFirstObject et tu vérifies si le tag de l'objet est "brasero_onoff", ensuite tu fais un GetNextObject, ainsi le script vérifiera tous les objets de la zone.

Bon, je sais, ce n'est pas très clair ce que je raconte Embarassed, mais moi aussi je commence seulement à approcher ces fonctions, donc...
J'avais posé une question similaire sur le forum de JeuxOnline (mis à part que je cherchais à récupérer toutes les créatures du même tag), regarde le script, ça pourra peut-être t'aider...

Voilà le lien
_________________
Aventure ! Camaraderie ! Et acier sur acier ! Les ingrédients légendaires ! Hein Bouh ?

http://cassin1306.spaces.live.com
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 04/04/2003 02:27:41 Sujet du message :

Merci pour le tuyau, je vais voir ça. Si qqun à une idée pour le reste, je prends Very Happy
_________________
» 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
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 04/04/2003 17:31:15 Sujet du message :

Bon alors je progresse dans l'idée, et maintenant je comprends vraiment pas pkoi ça marche pas... voilà ce que j'ai :

Code :
void main()
{

object oObject = GetFirstObjectInArea();

if ((GetIsDusk() == TRUE) || (GetIsNight() == TRUE)) // crépuscule/nuit
  {
  if(GetPlaceableIllumination(GetNearestObjectByTag("Brasero_onoff")) == TRUE)
    {
    // Recuperer le nb de baseros et les ETEINDRE
    while (GetIsObjectValid(oObject))
      {
      if (GetTag(oObject) == "Brasero_onoff")
        {
        SetPlaceableIllumination(oObject, FALSE);
        }
      oObject = GetNextObjectInArea();
      }

    RecomputeStaticLighting(GetArea(OBJECT_SELF));
    }
  }


if ((GetIsDawn() == TRUE) || (GetIsDay() == TRUE)) // aube/jour
  {
  if(GetPlaceableIllumination(GetNearestObjectByTag("Brasero_onoff")) == FALSE)
    {
    // Recuperer le nb de baseros et les ALLUMER
    while (GetIsObjectValid(oObject))
      {
      if (GetTag(oObject) == "Brasero_onoff")
        {
        SetPlaceableIllumination(oObject, TRUE);
        }
      oObject = GetNextObjectInArea();
      }

    RecomputeStaticLighting(GetArea(OBJECT_SELF));
    }
  }
}


J'ai beau retourner le code dans tous les sens, je capte pas pourquoi ça ne fonctionne pas. J'ai effectué des tests avec des SendMessageToPC, et avec ce code il récupère bien le bon nombre de braséros au bon moment, mais les flammes ne s'éteignent ni ne s'allument. Serait-ce le SetPlaceableIllumination qui n'est pas bon ? Y a-t-il des conditions précises à remplir sur les objets braséros pour que ça puisse marcher ? Etre ou ne pas être ?

Merci pour le coup de pouce et à +
_________________
» 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
 
Taern
Ecuyer
Inscrit le: 11 Avr 2003
Messages: 45
Localisation: 92
Répondre en citant
Posté le : 11/04/2003 22:55:10 Sujet du message :

Un DelayCommand avant le : SetPlaceableIllumination(oObject, FALSE);
serait une bonne chose à tester Smile

Mais attention, avant de dire que rien ne marche, vérifie qu'aucun braséro ne soit allumé. La fonction RecomputeStaticLightning() a tendance à ne pas fonctionner sur les objets plaçables à proximité du PJ.

Donc prudence et patience Wink
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Numéro ICQ Ignorer l'utilisateur
 
Jedaï
Chevalier
Inscrit le: 14 Nov 2002
Messages: 89
Localisation: Le Havre, ville pourrie
Répondre en citant
Posté le : 12/04/2003 06:47:09 Sujet du message :

Il est également possible que tes braseros éclairent mais que tu ne le vois pas... Essaie de leur faire jouer leur animation d'activation pour voir. Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Eldorane
Héros
Inscrit le: 18 Oct 2003
Messages: 298
Localisation: Moselle
Répondre en citant
Posté le : 29/09/2004 01:47:35 Sujet du message :

Finipe, tu peux me refiler le script finale qui fonctionne car j'ai lu ailleurs que tu l'avais fait marcher. Personnellement je suis nulle en script et ça m'aiderai beaucoup !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 29/09/2004 07:16:39 Sujet du message :

Le script final fonctionne en fait, mais plutôt mal, c'est décevant pour plusieurs raisons :

- C'est TRES lourd pour le module (la boucle fait vraiment travailler le module à chaque entrée de zone, en particulier si tu as beaucoup de plaçables dedans)

- Je ne sais pas si ça a été amélioré par Bioware depuis (ce message date pas d'hier), mais les fonctions agissant sur l'éclairage et les lumières sont assez peu fiables, en particulier le RecomputeStaticLighting() qui est très lourd et très gourmand en ressources une fois de plus.

- Même en admettant que ça fonctionne bien finalement, l'intérêt est en fait assez limité, car le résultat est mitigé, on se rend à peine compte de la différence jour/nuit.

Si c'est vraiment les différences jour/nuit que tu veux marquer dans ton module, je te conseille de trouver une solution alternative du genre :

- Texte donné en SendMessageToPC()

- Une seule et unique lumière (par exemple vert le jour et rouge la nuit)

- ...

Bon courage Cool
_________________
» 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
 
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 43.296ms