La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 15/11/2024 19:41:04


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Klemmth
Seigneur
Inscrit le: 26 Juin 2004
Messages: 176
Localisation: france
Répondre en citant
Posté le : 29/06/2004 14:05:47 Sujet du message : faire disparaître les PNJ d'une zone et les remplacer

Bonjour
J'aimerais que quelqu'un m'apporte son aide... J'essaye de faire un script qui, quand le joueur entre dans une zone, s'il possède un certain objet, tous les PNJ disparaissent et sont remplacer par des cadavres.
Pour ce qui est de la condition avec l'objet, pas de problème, idem pour ce qui est de remplacer par des cadavres (je pensais faire destroyobject, puis createobject a l'emplacement du PNJ, si quelqu'un a une meilleure solution...)
Ce qui me pose problème, c'est de faire disparaître tous les PNJ. Je pensais faire une boucle en utilisant la fonction substring (auparavant, j'aurais mis "tav" devant tous les tags des habitants de la zone), mais je suis pas très habile avec cette fonction.
Si quelqu'un pouvait m'ider.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Konrad
Grand Maître Chanteur du Conseil
Inscrit le: 30 Sep 2002
Messages: 1258
Localisation: Empire d'Halöven
Répondre en citant
Posté le : 29/06/2004 15:59:47 Sujet du message :

tu as beaucoup de pnj sur ta zone ?

Moi je ferais comme ça :

Je modifie tous les onspawn des PNJ de la zone pour les rendre indestructible mais pas immortel.

NWScript :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 à l'entrer tu PJ avec l'objet, je tue tous les PNJs de la zone et comme ça leur cadavre restent sur la zone ! C'est facile et beau.

NWScript :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.

_________________
Le site du Module Dragon Noir
Le groupe du Module L5A - L'ombre et la Lumière
Crimson Skies
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Longbow
Grand Sage du Conseil
Inscrit le: 10 Déc 2003
Messages: 638
Localisation: Orléans
Répondre en citant
Posté le : 29/06/2004 22:10:18 Sujet du message :

Hum, hum...

En m'appuyant sur les 1e remarques de Konrad, on peux essayer ceci:
1. Dans le OnSpawn.. comme Konrad
2. Lorsque le joueur acquière l'objet, tu places cette ligne dans le script OnAcquireItem du module
NWScript :
void main()
{
object oPC = GetModuleItemAcquiredBy();
object oTest = GetModuleItemAcquired();

    if (GetTag(oTest) == "Tag de l'objet")
    {
    SetLocalInt(oPC , "cadavre_test", 10);
    }
}
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.


3. Puis dans le OnEnter de la zone une boucle du genre

NWScript :
void main()
{
object oEnter = GetEnteringObject();
object oTest = GetFirstObjectInArea();
if (GetIsPC(oEnter))
{
  while(GetIsObjectValid(oTest)==TRUE)
  {
    if ((GetSubString(GetTag(oTest),0,3) == "tav") && (GetLocalInt(oEnter, "cadavre_test") == 10 ))
    {
      ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),oTest));
SetLocalInt(oPC , "cadavre_test", 20);
    }
    oTest = GetNextObjectInArea();
  }
}
}
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.


C'est évidemment perfectible, notemment pour squizzer le OnAcquireItem avec un test d'inventaire en boucle dans le 2e script... mais je ne m'y risque pas...
_________________
Rex illeteratus
Quasi Asinus Coronatus
Jean de Salisbury
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Klemmth
Seigneur
Inscrit le: 26 Juin 2004
Messages: 176
Localisation: france
Répondre en citant
Posté le : 30/06/2004 10:31:40 Sujet du message :

Je ne sais pas pourquoi, mais ça ne marche pas. Est-ce que ce serait possible que ce soit dû au fait qu'il y est des objects dans la zone? Peut-être qu'ils sont considérés comme des objet invalides?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Longbow
Grand Sage du Conseil
Inscrit le: 10 Déc 2003
Messages: 638
Localisation: Orléans
Répondre en citant
Posté le : 30/06/2004 14:46:25 Sujet du message :

Hum, hum...

Cette fois j'ai fais l'essai chez moi ca colle...

1. Dans le OnSpawn des créatures dont le tag commence par "tav"
Placer le script
NWScript :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.


2. Dans le OnAcquireItem
NWScript :
void main()
{
object oPC = GetModuleItemAcquiredBy();
object oTest = GetModuleItemAcquired();

if (GetTag(oTest) == "TestObject")
{
SetLocalInt(oPC , "cadavre_test", 10);

SendMessageToPC(oPC, "objet en place...");
}
}
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.


3. Dans le OnEnter de la zone

NWScript :
void main()
{
object oTest = GetFirstObjectInArea();
object oEnter = GetEnteringObject();
  while(GetIsObjectValid(oTest)==TRUE)
  {
      if (GetSubString(GetTag(oTest),0,3) == "tav" && (GetLocalInt(oEnter, "cadavre_test") == 10 ))
    {
      ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),oTest);
      }
    oTest = GetNextObjectInArea();
  }
}
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.


J'ai fais l'essai sur une version 1.62 HoU et les cadavres tombent si le joueur a l'objet et s'il entre dans la zone...
_________________
Rex illeteratus
Quasi Asinus Coronatus
Jean de Salisbury
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Klemmth
Seigneur
Inscrit le: 26 Juin 2004
Messages: 176
Localisation: france
Répondre en citant
Posté le : 30/06/2004 16:52:34 Sujet du message :

Merci beaucoup, ca a l'air de marcher.
 
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 75.241ms