La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 18/05/2024 20:17:07


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 09/01/2006 18:10:06 Sujet du message : Question de poids

Bonjour,

Je cherche à faire des pièges mettant en cause le poids des PJ (GetWeight).
J'aurais deux propositions de réalisation pour un piège mais je ne sais laquelle adopter.

Le but :
Un groupe entre dans une salle : la porte d'en face est fermée.
S'ils sont assez "lourds" et qu'ils se placent sur le trigger (vers le centre de la salle par exemple), ils activent le mécanisme qui ouvre la porte.

J'ai réussi sans problème à faire un script pour un seul joueur, mais là, j'aimerais qu'il y en ait plusieurs...

Alors j'ai deux idées :

Soit :
Première idée : I
- Je mets un script sur le on Enter du trigger qui prend le poids de la personne et l'ajoute à une variable locale qui est le poids total sur le trigger.
- Sur le OnExit je fais la même chose en soustrayant le poids à la variable...

Le problème c'est que si un personnage est sur le trigger et se téléporte, ça fait foirer le script, non ?

Deuxième idée alors : II
- Sur le OnHearbeat, je fais une boucle qui me dit le premier objet sur le trigger, puis le second, je prends son poids et je le mets dans une variable.

Est-ce que ça ne serait pas trop lourd ?

Qu'en pensez-vous ? Avez-vous d'autres idées ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 10/01/2006 00:15:21 Sujet du message :

Je crois que ta première idée marche, il me semble que le OnExit va se déclncher même si le joueur se téléporte.

Au pire, tu peux combiner les deux, au lieu de faire la verif dans le heartbeat, tu la fais au moment ou tu vas déclancher l'évenement. (Si le poids est atteint sur la variable, tu recalcule si c'est bien le bon résultat en prenant tous les objets sur le trigger)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 10/01/2006 06:03:29 Sujet du message :

Effectivement, après teste, même si le joueur se téléporte, il est considéré comme un ExitingObject !

Ca marche donc très bien. Merci beaucoup !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 10/01/2006 13:45:37 Sujet du message : compter les créatures dans un déclencheur

Pour compter le poids total des créatures dans une zone délimitée par un déclencheur :
NWScript :

int TrigWeight(object oTrigger){
  object oPC = GetFirstInPersistentObject(oTrigger) ;
  int nWeight ;
  while( GetIsObjectValid(oPC) ){
      nWeight += GetWeight(oPC) ;
      oPC = GetNextInPersistentObject(oTrigger) ;
  }
  return nWeight ;
}

void main(){}
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.


Sur le OnEnter c'est très bien, on évite le heart-beat.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 10/01/2006 18:32:23 Sujet du message :

J'ai mis ce script dans le onEnter du Trigger :

NWScript :
void main()
{
object oPC = GetEnteringObject();
int nPoids = GetWeight(oPC)/10;
int nP1 = GetLocalInt(OBJECT_SELF, "poids");
int nP2 = nP1 + nPoids;
string sPoids = IntToString(nP2);

SetLocalInt(OBJECT_SELF, "poids", nP2);

    if ( nP2 > 80 )
    {
    FloatingTextStringOnCreature("Bingo !", oPC);
    }
}
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.


Et celui-ci dans le OnExit :

NWScript :
void main()
{
object oPC = GetExitingObject();
int nPoids = GetWeight(oPC)/10;
int nP1 = GetLocalInt(OBJECT_SELF, "poids");
int nP2 = nP1 - nPoids;

SetLocalInt(OBJECT_SELF, "poids", nP2);

}
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.


Est-ce que c'est moins bien, plus lourd, ou ça peut poser plus de problème ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 11/01/2006 12:53:15 Sujet du message :

Cela fonctionne : question performance, je sais pas trop : il faudrait vérifier avec par exemple le profiler nwnx2.
En tout cas je me demande si ca vaut le coup d'optimiser des scripts aussi simples.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 11/01/2006 13:40:02 Sujet du message :

A propos de ton script, juste une remarque, GetWeight ne donne que le poids transporté par une créature, tu devrais peut-être rajouter du poids artificiellement en fonction de la taille de la créature qui entre (par exemple, si un mago entre avec son familier, le familier pese 0, pas très logique)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Semcatala
Grand Sage du Conseil
Inscrit le: 20 Jan 2004
Messages: 950
Répondre en citant
Posté le : 11/01/2006 13:54:53 Sujet du message :

Sith Vicious > Et si le familier vole ? Very Happy
_________________
Adresse du forum de mon module : Quetes et Legendes
" La ruse doit être employée pour faire croire que l'on est où l'on est pas, que l'on veut ce qu'on ne veut pas. " CdG
" La véritable école du Commandement est la culture générale. " CdG
" Une société prête à sacrifier un peu de liberté contre un peu de sécurité ne mérite ni l'une ni l'autre et finit par perdre les deux. " B.F
" La gloire se donne seulement à ceux qui l'ont toujours rêvée. " CdG
" La fin de l'espoir est le commencement de la mort. " CdG
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 11/01/2006 14:11:47 Sujet du message :

Grrrr

Laughing
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 11/01/2006 15:01:38 Sujet du message :


Citation :
Description
Returns the weight of an individual item. When used on a creature, returns the weight of all items combined carried by that creature (not the creature's actual weight by itself).
Effectivement, il faudrait rajouter suivant la race, le sexe ou tout ce qui nous passe par la tête.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé 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 39.374ms