La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 27/11/2024 12:09:04
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
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 ). 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 | |
Cassin Papa-poule(t) & poissard intemporel Messages: 7471 Localisation: 6 bis rue de la Couveuse, Poulailler 39b |
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 , 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 | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
Merci pour le tuyau, je vais voir ça. Si qqun à une idée pour le reste, je prends
_________________ » 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 | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
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 | |
Taern Ecuyer Messages: 45 Localisation: 92 |
Un DelayCommand avant le : SetPlaceableIllumination(oObject, FALSE);
serait une bonne chose à tester 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 |
Revenir en haut | |
Jedaï Chevalier Messages: 89 Localisation: Le Havre, ville pourrie |
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.
|
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
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 | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
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 _________________ » 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 | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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