La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 28/12/2024 10:47:38


  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 : 24/02/2003 19:03:42 Sujet du message : Rencontres et objets actifs selon critères précis

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 ! Smile
_________________
» 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
 
Jedaï
Chevalier
Inscrit le: 14 Nov 2002
Messages: 89
Localisation: Le Havre, ville pourrie
Répondre en citant
Posté le : 25/02/2003 12:33:21 Sujet du message :

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... Very Happy
 
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 : 25/02/2003 17:07:31 Sujet du message :

C'est pour une aventure solo... j'ai un peu progressé sur l'idée, mais c'est pas encore ça Confused
_________________
» 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 : 25/02/2003 18:56:10 Sujet du message :

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() Laughing)

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 Very Happy

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Serguai
Grand Chevalier
Inscrit le: 07 Déc 2002
Messages: 104
Répondre en citant
Posté le : 26/02/2003 00:56:11 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur 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 : 26/02/2003 05:21:54 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
IxPe
Ecuyer
Inscrit le: 17 Déc 2002
Messages: 40
Localisation: Dans la forêt
Répondre en citant
Posté le : 26/02/2003 09:33:13 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Serguai
Grand Chevalier
Inscrit le: 07 Déc 2002
Messages: 104
Répondre en citant
Posté le : 26/02/2003 10:46:30 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur 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 : 28/02/2003 03:18:54 Sujet du message :

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 Mad 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 Laughing Laughing Laughing Laughing Laughing Laughing Laughing

Merci pour ton aide Serguai ! 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 32.589ms