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:27:37


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Harpie
Acolyte
Inscrit le: 10 Nov 2003
Messages: 22
Répondre en citant
Posté le : 24/02/2004 06:05:49 Sujet du message : Problème de levier + portail

Bonjour,

Bon, je débute dans le scripting nwn, et j'ai une question à laquelle je n'ai trouvée la réponse ni dans la liste des fonctions d'Aurora, ni dans la recherche sur ce forum alors j'espère que l'un de vous pourra m'aider Confused , ce dont je ne doute pas réellement. Smile

Voilà, je suis en train de faire le tutorial d'Amaranthe (vous devez connaître ?), l'exercice des deux leviers qui font apparaître un portail. Jusque là, ça va (facile quand le code est fourni dans le tuto..). Le problème est que je désire que le portail disparaisse lorsque je désactive l'un des deux leviers.

Alors, premièrement, les leviers, activés ou non, ils sont toujours dans la même position. Quel serait la façon de les faire bouger un peu pour indiquer l'activation/désactivation de ces leviers ?

Deuxièmement, pour faire disparaître le portail, j'ai essayé toute sorte de fonctions, aucune d'elles n'a donner les résultats escomptés. J'ai bien réussi à le désactivé, mais pas à le faire disparaître... Help!


Merci pour le temps que vous prendrez à me répondre !
_________________
Life's tough. It's tougher if you're stupid.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 24/02/2004 08:35:52 Sujet du message :

Je ne connais pas le tutorial en question, mais essaye avec ça :

NWScript :
object oCible = GetWaypointByTag("WP_cible_portail");
object oPC = GetLastUsedBy();

void main()
{
 
  if(GetLocalInt(OBJECT_SELF, "var_portail") == FALSE)
  {
    PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
    object oPortail = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_portal", GetLocation(oCible));
    SetLocalInt(OBJECT_SELF, "var_portail", TRUE);
  }

 
  else
  {
    PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);
    DestroyObject(GetNearestObjectByTag("Portal"));
    SetLocalInt(OBJECT_SELF, "var_portail", FALSE);
  }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Normalement ça marche, c'est ce que j'utilise par défaut pour ce genre de script. Par contre, deux détails :

- Ton levier doit être mis au départ sur la position "désactivée" (propriétés, onglet "avancées") car par défaut il est en l'état activé, et du coup la première animation du plaçable sera double.

- Dans cet exemple, j'ai employé le plaçable de portail à resref "plc_portal", qui est non utilisable. Je te conseille de créer ton portail comme un objet plaçable de la palette personnalisée, avec resref et tag uniques, tu auras moins de soucis.

Voili voilou 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
 
Harpie
Acolyte
Inscrit le: 10 Nov 2003
Messages: 22
Répondre en citant
Posté le : 24/02/2004 18:45:30 Sujet du message :

Le PlayAnimation fonctionne très bien sur les leviers, merci ! Smile

Par contre, mon portail ne disparait toujours pas. Je te montre le code que j'utilise :

NWScript :

void main()
  {
  int nUsed1 = GetLocalInt(OBJECT_SELF, "ETAT_LEVIER") ;
  int nUsed2 ;

  if (nUsed1 == 1)
    { // Si le levier est a " On " alors le placer a " Off "
    SetLocalInt(OBJECT_SELF, "ETAT_LEVIER", 0);
    PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);
    DestroyObject(GetNearestObjectByTag("plc_portal"), 0.0);
    SetLocalInt(GetObjectByTag("PORTTRIG"), "READY", 0);
    }
  else
    { // Si le levier est a " Off " alors le placer a " On "
    PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
    SetLocalInt(OBJECT_SELF, "ETAT_LEVIER", 1);
    nUsed1 = GetLocalInt(GetObjectByTag("LEVIER1"), "ETAT_LEVIER");
    nUsed2 = GetLocalInt(GetObjectByTag("LEVIER2"), "ETAT_LEVIER");
    if ((nUsed1==1) && (nUsed2==1)) // Est ce que les deux leviers sont a " On " ?
      {
      object oPortalSpot=GetWaypointByTag("TM_INWP");
      CreateObject(OBJECT_TYPE_PLACEABLE,"plc_portal",GetLocation(oPortalSpot), TRUE);
      SetLocalInt(GetObjectByTag("PORTTRIG"), "READY", 1);
      }
    }
  }
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Note qu'il y a deux leviers, un trigger et deux waypoints.
_________________
Life's tough. It's tougher if you're stupid.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 24/02/2004 23:52:20 Sujet du message :

Ah ok donc si j'ai bien compris, tu veux que quand on active 2 leviers, un portail apparaisse, si et seulement si les deux leviers sont activés...

Dans ce cas je te propose une autre solution utilisant un seul et même script sur les deux leviers. Le principe serait d'utiliser une variable locale stockée sur le module dont la valeur pourrait être 0, 1 ou 2 en fonction du nombre de leviers activés, et deux autres variables locales (une par levier) stockées sur les leviers eux-mêmes pour déterminer s'ils sont ON ou OFF. Ca donnerait quelque chose dans ce goût-là :

NWScript :
object oCible = GetWaypointByTag("WP_cible_portail");
object oPC = GetLastUsedBy();
int i = GetLocalInt(GetModule(), "VAR_PORTAIL");

void main()
{
  // Levier OFF --> ON
  if(GetLocalInt(OBJECT_SELF, "ETAT_LEVIER") == 0)
  {
    PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE);
    SetLocalInt(OBJECT_SELF, "ETAT_LEVIER", 1);
    i = i + 1;
    SetLocalInt(GetModule(), "VAR_PORTAIL", i);

    // Si les 2 leviers sont ON
    if (i == 2)
    {
      CreateObject(OBJECT_TYPE_PLACEABLE, "plc_portal", GetLocation(oCible));
    }
  }

  // Levier ON --> OFF
  else
  {
    PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE);
    SetLocalInt(OBJECT_SELF, "ETAT_LEVIER", 0);
    i = i - 1;
    SetLocalInt(GetModule(), "VAR_PORTAIL", i);

    // Si plus qu'un levier ON, alors juste avant le portail existait : on le detruit
    if (i == 1)
    {
      DestroyObject(GetNearestObjectByTag("Portal"));
    }
  }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Script non testé Confused mais ça devrait marcher je pense, à une ou deux erreurs de syntaxe près peut-être Very Happy

Edit : maintenant que je revois ton script je remarque que tu t'es trompé dans ta commande DestroyObject() : tu as mis un resref pour définir l'objet à détruire, alors que c'est un tag que tu dois utiliser.
_________________
» 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
 
Harpie
Acolyte
Inscrit le: 10 Nov 2003
Messages: 22
Répondre en citant
Posté le : 25/02/2004 02:36:55 Sujet du message :

Wow ! Ça fonctionne ! Du premier coup en plus ! Merci beaucoup !!
_________________
Life's tough. It's tougher if you're stupid.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger 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.047ms