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 23/11/2024 15:00:13
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 !
Voilà, j'expose mon projet : je voudrais que des rencontres avec des NPC hostiles et la possibilité de VOIR et de PRENDRE un objet précis soit possibles uniquement s'il fait nuit et si le PC porte sur lui une paire de gants spéciaux. Et donc par la même occasion, je voudrais que le créatures des rencontres disparaissent lorsque le jour revient. J'ai beau me triturer le citron, je ne vois pas comment m'y prendre. Quelqu'un pourrait-il m'aiguiller sur la bonne voix ? Mettons que l'objet à prendre se nomme "FLEUR" et le gant "GANT" (je m'y retrouverai mieux) Thx à tous ! _________________ » 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 | |
Jedaï Chevalier Messages: 89 Localisation: Le Havre, ville pourrie |
Si c'est dans le cadre d'une aventure en solo, c'est facile à faire, en multi, tu ne pourras éviter que les autres joueurs ne possédant pas les gants voient quand même les ennemis et l'objet...
|
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
C'est pour une aventure solo... j'ai un peu progressé sur l'idée, mais c'est pas encore ça
_________________ » 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 voilà ce que j'ai pour le moment, placé sur le OnHeartBeat de la zone, mais ça fonctionne pas :
Code : location lWP = GetLocation(GetWaypointByTag("LOCALISATION_ARBRE"));
object oPC = GetFirstPC(); object oRencontre = GetObjectByTag("REVENANTS_DESOLATIONS"); void main() { // --> SI NUIT ET PC PORTE GANTS SPECTRAUX if ((GetIsNight())&&(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC) == GetObjectByTag("GANTS_SPECTRAUX"))) { if (!GetIsObjectValid(GetObjectByTag("ARBRE_SPECTRAL"))) { CreateObject(OBJECT_TYPE_PLACEABLE, "ARBRE_SPECTRAL", lWP); } if (!GetEncounterActive(oRencontre)) { ActionDoCommand(SetEncounterActive(TRUE, oRencontre)); } } // --> SINON else { if (GetIsObjectValid(GetObjectByTag("ARBRE_SPECTRAL"))) { DestroyObject(GetObjectByTag("ARBRE_SPECTRAL")); } if (GetEncounterActive(oRencontre)) { ActionDoCommand(SetEncounterActive(FALSE, oRencontre)); } } } Déjà je suis pas sûr de mon GetIsObjectValid() : il faudrait plutôt une commande du genre "Savoir si l'objet est présent dans la zone" (GetIsObjectPresentInTheZone() ) Question subsidiaire, comment faire pour appliquer à des objets l'impression qu'il sont invisibles (j'ai vu un truc qui pourrait faire l'affaire : EFFECT_TYPE_SEEINVISIBLE) Eeeeuh voilà, j'aurai sans doute d'autres questions quand j'aurai validé ce message Merci à tous. _________________ » 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 | |
Serguai Grand Chevalier Messages: 104 |
Tiens, je te corrige quelques erreurs:
Code : location lWP = GetLocation(GetWaypointByTag("LOCALISATION_ARBRE")); object oPC = GetFirstPC(); object oRencontre = GetObjectByTag("REVENANTS_DESOLATIONS"); void main() { // --> SI NUIT ET PC PORTE GANTS SPECTRAUX if (GetIsNight()&&GetTag(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC)) == "GANTS_SPECTRAUX") { SetLocalObject(GetModule(),"arbrespectral",CreateObject(OBJECT_TYPE_PLACEABLE, "resrefdelarbre", lWP)); if (!GetEncounterActive(oRencontre)) { ActionDoCommand(SetEncounterActive(TRUE, oRencontre)); } } // --> SINON else { object arbre = GetLocalObject(GetModule(),"arbrespectral"); if (GetIsObjectValid(arbre)) { DestroyObject(arbre); } if (GetEncounterActive(oRencontre)) { ActionDoCommand(SetEncounterActive(FALSE, oRencontre)); } } } Voilà ca devrait mieux marcher, à l'erreur de parenthèse prêt. Trois corrections: .Dans le CreateObject tu avais mis un truc en majuscule, donc probablement un tag. Hors il te faut mettre le resref de ton objet qui est toujours en minuscule. Donc vérifie quel est le resref et remplace le dans le script a la place de resrefdelarbre .C'est dangereux de comparer les deux objets comme tu l'a fait car même s'ils sont identiques, ce ne sont pas forcément les mêmes. Il faut donc comparer les tags. .Pour vérifier que ton objet est valide, le mieux est de le mettre dans un localobject que tu peux ensuite récupérer avec un GetLocalObject. De cette facon tu es sûr de manipuler le bon... Je n'ai pas testé donc il peut subsister des erreurs type erreur de syntaxe. |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
Merci pour le coup de pouce : il semble bien qu'il se passe quelque chose quand les conditions sont réunies, mais mon ordi se met alors à ramer comme un fou, et NWN plante. C'est une bonne machine donc y a pas de raison, je suppose que c'est une histoire de boucle dans la programmation, mais je vois pas la faille...
_________________ » 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 | |
IxPe Ecuyer Messages: 40 Localisation: Dans la forêt |
Je suppose que le traitement dans le OnHeartBeat est trop long si
bien qu il n a pas fini son traitement que la fct est rappelee... C est tout de meme etonnant car il y a tout de meme un battement toutes les 6 secondes... |
Revenir en haut | |
Serguai Grand Chevalier Messages: 104 |
Oui en fait maintenant que j'y réfléchis, c'est parfaitement logique car une fois les conditions réunies, ton objet est créé à chaque heartbeat donc toutes les six secondes !
Pour résoudre ce problème il te suffit de rajouter une variable locale et le tour est joué: NwScript: Code : location lWP = GetLocation(GetWaypointByTag("LOCALISATION_ARBRE"));
object oPC = GetFirstPC(); object oRencontre = GetObjectByTag("REVENANTS_DESOLATIONS"); void main() { // --> SI NUIT ET PC PORTE GANTS SPECTRAUX if (GetLocalInt(GetModule(),"objectcreated")==0 && GetIsNight()&&GetTag(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC)) == "GANTS_SPECTRAUX") { SetLocalObject(GetModule(),"arbrespectral",CreateObject(OBJECT_TYPE_PLACEABLE, "resrefdelarbre", lWP)); SetLocalInt(GetModule(),"objectcreated",1); if (!GetEncounterActive(oRencontre)) { ActionDoCommand(SetEncounterActive(TRUE, oRencontre)); } } // --> SINON else if(GetLocalInt(GetModule(),"objectcreated")==1) { object arbre = GetLocalObject(GetModule(),"arbrespectral"); if (GetIsObjectValid(arbre)) { DestroyObject(arbre); SetLocalInt(GetModule(),"objectcreated",0); } if (GetEncounterActive(oRencontre)) { ActionDoCommand(SetEncounterActive(FALSE, oRencontre)); } } } Ca doit etre un truc dans le genre ... Dernière édition par Serguai le 28/02/2003 12:23:18; édité 1 fois
|
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
Alleluia ! Ca marche, après moult galères ! Voici donc le résultat final, j'ai été obligé de séparer les conditions sinon c'est trop le bordel :
Code : location lWP = GetLocation(GetWaypointByTag("LOCALISATION_ARBRE"));
object oPC = GetFirstPC(); object oRencontre = GetObjectByTag("REVENANTS_DESOLATIONS"); object oRencontre2 = GetObjectByTag("REVENANTS_DESOLATIONS2"); object oRencontre3 = GetObjectByTag("REVENANTS_DESOLATIONS3"); void main() { // --> SI PC PORTE GANTS SPECTRAUX if ((GetLocalInt(oPC, "arbrecree") != 1) && (GetTag(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC)) == "GANTS_SPECTRAUX")) { CreateObject(OBJECT_TYPE_PLACEABLE, "arbrespectral", lWP); SetLocalInt(oPC, "arbrecree", 1); } if ((GetLocalInt(oPC, "arbrecree") == 1) && ((GetTag(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC)) != "GANTS_SPECTRAUX") || (!(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC)))))) { DestroyObject(GetObjectByTag("ARBRE_SPECTRAL")); SetLocalInt(oPC, "arbrecree", 0); } // --> RENCONTRES if ((GetLocalInt(oPC, "rencontres_actives") != 1) && (GetTag(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC)) == "GANTS_SPECTRAUX")) { SetEncounterActive(TRUE, oRencontre); SetEncounterActive(TRUE, oRencontre2); SetEncounterActive(TRUE, oRencontre3); SetLocalInt(oPC, "rencontres_actives", 1); } if ((GetLocalInt(oPC, "rencontres_actives") == 1) && ((GetTag(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC)) != "GANTS_SPECTRAUX") || (!(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC)))))) { SetEncounterActive(FALSE, oRencontre); SetEncounterActive(FALSE, oRencontre2); SetEncounterActive(FALSE, oRencontre3); SetLocalInt(oPC, "rencontres_actives", 0); } } Bon maintenant, il reste un problème mon arbre qui se crée ou se détruit selon les conditions, il contient quelquechose. Et quand il se crée un 1ère fois, puis se détruit, son contenu reste là par terre. Je vais essayer un DestroyObject, et pis ben sinon à part ça, impeccable Merci pour ton aide Serguai ! _________________ » 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