La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 27/04/2024 13:46:32


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Darkavanger
Grand Chevalier
Inscrit le: 15 Déc 2004
Messages: 114
Répondre en citant
Posté le : 05/12/2007 20:20:29 Sujet du message : [Résolu] Spawn aléatoire

Salut à tous !
Voilà, je me met doucement à l'éditeur de Nwn 2 (A ce propos, est ce qu'il y a du monde sur le jeu ? La communauté Française est elle active ?) et j'essaye de faire un script permettant le spawn de monstre relativement aléatoire. Mais y a un léger problème, lorsque je lance le module de test, plantage de Nwn 2.

Script disponible un peu plus bas

Le "vrai" problème se situe à la ligne :
NWScript :
iLocWP = GetLocation (oObjet);
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.


Si cette ligne est en commentaire tout se passe relativement bien, les mobs sont crées, mais au même endroit (logique, l'endroit ne change pas...), mais si elle est dé commenter, là ça plante complet... Est ce que quelqu'un aurait une idée du pourquoi du comment ?

Bonne soirée à tous !

PS : Les lignes de Create... commentés le sont uniquement pour le test !
Dernière édition par Darkavanger le 07/12/2007 18:16:46; édité 4 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Argyl
Grand Sage du Conseil
Inscrit le: 09 Fév 2005
Messages: 704
Répondre en citant
Posté le : 06/12/2007 13:13:15 Sujet du message :

Le problème ne viendrait-il pas de ta définition de oObjet ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Darkavanger
Grand Chevalier
Inscrit le: 15 Déc 2004
Messages: 114
Répondre en citant
Posté le : 06/12/2007 17:35:58 Sujet du message :

Ben je ne pense pas, la première fois que je défini oObjet, je demande de regarder le 1° objet dans l'Area, ensuite au cour du script, je vérifie s'il s'agit d'un WP, si oui je fais mon bazar, sinon je passe à l'objet suivant dans la zone, et je change la localisation de l'objet.

Le problème est que si je ne change pas la localisation de l'objet, tout marche bien (à part que les mobs sont crées tous au même endroit), mais si je la change, ça plante le jeu.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 06/12/2007 18:38:09 Sujet du message :

Euh à première vue, sans regarder le script en détail on voit que tu défini sRace et sLvl sur le FirstObject, si le premier objet n'est pas un waypoint il y a un problème, d'une part car tu ne remet pas à jour ces deux variables dans la boucle tu les laisses à leur valeurs initiales, d'autre par par la définition du iLocWP qui se trouve en fin de boucle, après la redifinition de l'objet, et si jamais il n'y a pas de NextObject tu prend la Location de quel objet ??

Donc une première solution serait déjà de remettre ça dans l'ordre ^^, il te suffit juste de déclarer tes 3 variables qui doivent se rafraichir dans la boucle au debut (sRace, sLvl, iLocWP) et tu les rafraichient en entrée de ton if pour le cas waypoint.

Après si le problème persiste il faudra voir =p
_________________
Scripts, systèmes, fonctions,... c'est par ici...
Pyjama pour castor, une vocation, un avenir sûr
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
Darkavanger
Grand Chevalier
Inscrit le: 15 Déc 2004
Messages: 114
Répondre en citant
Posté le : 06/12/2007 23:00:29 Sujet du message :

Effectivement le problème venait de là ! Merci à toi Ivellios !
Nouvelle version du script :

Script disponible un peu plus bas

Maintenant, un nouveau problème se pose lors des tests IG, lorsque je fais le test, au lieu de me retrouver avec 1 nain à chaque WP (nouvelle version du script), je me retrouve avec tout un tas de nain (c'est pas que j'aime pas les nains hein...) comme sur ce screen :



Ce que je ne comprend pas, c'est pourquoi il y en a autant, je ne les crée pas dans une boucle, donc il ne devrait en spawner qu'un, lors du case correspondant. Confused

Quelqu'un aurait t'il une idée ?
Dernière édition par Darkavanger le 07/12/2007 17:52:49; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 07/12/2007 12:42:38 Sujet du message :

Tu ne test pas si la créature entrante est un PC (avec GetIsPC), donc du coup ton script se declenche à chaque fois qu'un "objet" entre, donc tes nains que tu créé déclenche aussi cette event et ainsi de suite (pour ça que tu en a plein ^^).
_________________
Scripts, systèmes, fonctions,... c'est par ici...
Pyjama pour castor, une vocation, un avenir sûr
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
Darkavanger
Grand Chevalier
Inscrit le: 15 Déc 2004
Messages: 114
Répondre en citant
Posté le : 07/12/2007 17:43:21 Sujet du message :

Effectivement c'était bien ça...

Donc, pour ceux que ça intéresse, voici le script dans sa version définitive, le nombre de spawn est 1, mais il est facilement modifiable, en copiant/collant autant de fois que nécessaire la ligne CreateObject.
NWScript :



object oPC = GetEnteringObject ();
object oModule = GetModule();
object oObjet = GetFirstObjectInArea (OBJECT_SELF);
int iRandom;
int iType = GetObjectType(oObjet);
string sActive = GetLocalString (oModule, "onenter_active");



void main ()
{
if ((sActive == "oui") && GetIsPC (oPC))
  {
  while (oObjet != OBJECT_INVALID)
    {
    if (iType == OBJECT_TYPE_WAYPOINT)
      {
      string sRace = GetStringLeft(GetTag(oObjet), 4);
      string sLvl = GetStringRight (GetTag (oObjet), 5);
      location iLocWP = GetLocation (oObjet);
      iRandom = Random (3);
      switch (iRandom)
        {
          case 0 :
            {
            CreateObject (OBJECT_TYPE_CREATURE, sRace+"guerrier"+sLvl, iLocWP, FALSE);
            break;
            }
          case 1 :
            {
            CreateObject (OBJECT_TYPE_CREATURE, sRace+"archer"+sLvl, iLocWP, FALSE);
            break;
            }
          case 2 :
            {
            CreateObject (OBJECT_TYPE_CREATURE, sRace+"mage"+sLvl, iLocWP, FALSE);
            break;
            }
          case 3 :
            {
            CreateObject (OBJECT_TYPE_CREATURE, sRace+"pretre"+sLvl, iLocWP, FALSE);
            break;
            }
        }
      }
      oObjet = GetNextObjectInArea (OBJECT_SELF);
    }
  }
}
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.



Un grand merci à toi Ivellios pour ta précieuse aide !
Si quelqu'un a une idée pour l'optimiser n'hésitez pas Wink
Merci !

Bonne soirée à tous ! Smile

Edit : Bon ben bizare, ça a très bien marché avec les mobs que j'avais fait pour le test, mais là je viens d'en essayer de nouveaux, et ça marche plus ^^.
Donc, c'est plus résolu finalement Razz
Re-Edit : C'est re-résolu, en fait, conflit avec un tag, si le tag est différent sur resref ça marche, sinon, ça ne marche pas ! Le truc c'est que je vois pas pourquoi, les CreateObject sont sensés prendre en paramétré le resref et non le tag non ?
Dernière édition par Darkavanger le 07/12/2007 18:15:18; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Darkavanger
Grand Chevalier
Inscrit le: 15 Déc 2004
Messages: 114
Répondre en citant
Posté le : 07/12/2007 18:10:50 Sujet du message :

Edit :'(


Citation :

Edit : Bon ben bizare, ça a très bien marché avec les mobs que j'avais fait pour le test, mais là je viens d'en essayer de nouveaux, et ça marche plus ^^.
Donc, c'est plus résolu finalement Razz
Re-Edit :

Citation :

Re-Edit : C'est re-résolu, en fait, conflit avec un tag, si le tag est différent sur resref ça marche, sinon, ça ne marche pas ! Le truc c'est que je vois pas pourquoi, les CreateObject sont sensés prendre en paramétré le resref et non le tag non ?
Si un modo passe dans le coin, il a le droit de supprimer ce message qui sert à rien :s
Désolé du dérangement :s

Merci !
 
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 31.393ms