La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 20:52:27


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
PetitPrince
Super-Mouton
Inscrit le: 12 Sep 2002
Messages: 2043
Localisation: Asteroïde B-612 actuellement crashé en Suisse
Répondre en citant
Posté le : 24/12/2003 10:50:40 Sujet du message : [XPModule] Incrémentation, je l'ai dans le [BIIIIP]

Voilà un bout de script, placé sur le onhearthbeat d'une zone (oui, c'est mal mais le module est petit):
NWScript :

void main()
{

string s09 = IntToString(d10());
object oWaySpawn = GetWaypointByTag("SpawnMonstre_0"+s09);
object oPJ = GetFirstPC();
string sCreature = GetLocalString(oPJ,"Creature");
int NbrPresentCreature = GetLocalInt(oPJ,"NbrPresentCreature");
int NbrHereCreature = GetLocalInt(oPJ,"NbrHereCreature");
int NbrCreature = GetLocalInt(oPJ,"NbrCreature");


    if(GetLocalInt(oPJ,"Combat")==1)
    {
    if(GetLocalInt(oPJ,"NbrCreature")!=0)
    {
        if(NbrHereCreature <= NbrPresentCreature)
        {

            if(sCreature=="goblin")
                {
                switch(Random(3))
                    {
                    case 0: CreateObject(OBJECT_TYPE_CREATURE,"h_gobelin1",GetLocation(oWaySpawn),FALSE,"Invoc");
                            ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3),GetLocation(oWaySpawn));
                    case 1: CreateObject(OBJECT_TYPE_CREATURE,"h_gobelin2",GetLocation(oWaySpawn),FALSE,"Invoc");
                            ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3),GetLocation(oWaySpawn));
                    case 2: CreateObject(OBJECT_TYPE_CREATURE,"h_gobelin3",GetLocation(oWaySpawn),FALSE,"Invoc");
                            ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3),GetLocation(oWaySpawn));
                    case 3: CreateObject(OBJECT_TYPE_CREATURE,"h_gobelin4",GetLocation(oWaySpawn),FALSE,"Invoc");
                            ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3),GetLocation(oWaySpawn));

                    }
                }

            if(sCreature=="kobold")
                {
                switch(Random(4))
                    {
                    case 0: CreateObject(OBJECT_TYPE_CREATURE,"h_kobold1",GetLocation(oWaySpawn),FALSE,"Invoc");
                            ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3),GetLocation(oWaySpawn));
                    case 1: CreateObject(OBJECT_TYPE_CREATURE,"h_kobold2",GetLocation(oWaySpawn),FALSE,"Invoc");
                            ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3),GetLocation(oWaySpawn));
                    case 2: CreateObject(OBJECT_TYPE_CREATURE,"h_kobold3",GetLocation(oWaySpawn),FALSE,"Invoc");
                            ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3),GetLocation(oWaySpawn));
                    case 3: CreateObject(OBJECT_TYPE_CREATURE,"h_kobold4",GetLocation(oWaySpawn),FALSE,"Invoc");
                            ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3),GetLocation(oWaySpawn));
                    case 4: CreateObject(OBJECT_TYPE_CREATURE,"h_kobold5",GetLocation(oWaySpawn),FALSE,"Invoc");
                            ApplyEffectAtLocation(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3),GetLocation(oWaySpawn));
                    }
                }
      NbrHereCreature++ ;
      NbrCreature-- ;
        }
    }
    if(GetLocalInt(oPJ,"NbrCreature")==0)
    {
    SetLocalInt(GetFirstPC(),"Combat",0);
    FloatingTextStringOnCreature("Vous avez fini le combat",oPJ);
    }
  }
}

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.

L'effet désiré est d'invoquer une petite horde de monstre (j'ai mis quelque execute script pour spawner les monstres plus vite), cette horde étant limité à NbrCreature dans la reserve (= qui ne combattent pas) et NbrPresentCreature dans le champs de bataille (ceux-ci étant pioché dans la reserve). Quand la reserve est épuisée, on arrête le spawnage.
Pour ce faire, j'ai décidé d'incrementer une autre variable (NbrHereCreature) à chaque spawnage (et de le decrementer à sa mort avec un OnDeath modifié), et également de décrémenter la variable NbrCreature, pour faire vider la reserve.

Le problème, c'est qu'en test (avec des Speakstring de variable habilement mis), il veut pas m'incrementer le salaud...

J'ai beau avoir fait 3 fois le tour du script, je vois pas mon erreur, et puisqu'on est toujours mieux corrigé par les autres, je vous demande ce qui va pas dans ce fp2!3(49tu@4q%t de script.

Edit de finipe : super à la bourre et très prude comme d'habitude, je mets une censure sur un des termes de ton titre Laughing
EDIT de PP qui vient après celui de finipe:
Laughing Laughing Laughing
_________________
b-612.yi.org (chez moi) | tetrisconcept.com (LE site sur Tetris) | Grospixels (c'était mieux avant) | Geekzone (for and by crazy geeks)

Securom, ça suxe
Dernière édition par PetitPrince le 06/01/2004 18:43:14; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
k0rvet
Ecuyer
Inscrit le: 24 Nov 2003
Messages: 67
Répondre en citant
Posté le : 24/12/2003 11:25:17 Sujet du message :

Bah, je sais pas si c'est normal, mais ce qui me chifonne, c'est que tu incrémentes NbrHereCreature et décrémente NbrCreature, mais après, tu ne les stocke pas à l'aide d'un SetLocalInt(). Donc si le script est appelé 2 fois, les valeurs n'auront pas changé. Embarassed

C'est normal?

Sinon va falloir chercher aut'chose.
_________________
Moi j'dis ca, mais bon j'dis rien hein?
..:: Les Chroniques de la Terre du Milieu ::..
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
PetitPrince
Super-Mouton
Inscrit le: 12 Sep 2002
Messages: 2043
Localisation: Asteroïde B-612 actuellement crashé en Suisse
Répondre en citant
Posté le : 24/12/2003 11:31:27 Sujet du message :

Les SetLocalInt se trouvent autre part, dans des dialogues
_________________
b-612.yi.org (chez moi) | tetrisconcept.com (LE site sur Tetris) | Grospixels (c'était mieux avant) | Geekzone (for and by crazy geeks)

Securom, ça suxe
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
k0rvet
Ecuyer
Inscrit le: 24 Nov 2003
Messages: 67
Répondre en citant
Posté le : 24/12/2003 12:00:30 Sujet du message :

Etrange ca...
Je sais pas si je suis dans le vrai, mais a la fin de ton script, tes deux variables sont effacées non? Alors si tu les stocke à partir d'un autre script, elles seront égales à 0...
A moins que tu n'ai pas mis tout ton script et que tu les passe dans une fonction?
Je sais je m'obstine, mais la y a quelque chose qui m'échappe Confused
_________________
Moi j'dis ca, mais bon j'dis rien hein?
..:: Les Chroniques de la Terre du Milieu ::..
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
PetitPrince
Super-Mouton
Inscrit le: 12 Sep 2002
Messages: 2043
Localisation: Asteroïde B-612 actuellement crashé en Suisse
Répondre en citant
Posté le : 24/12/2003 12:05:36 Sujet du message :

Ben lse variables sont définie par trois script mises dans un dialogue. Trois exemples
NWScript :
void main()
{
SetLocalInt(GetPCSpeaker(),"NbrCreature",20);
}
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.

NWScript :
void main()
{
SetLocalInt(GetPCSpeaker(),"NbrPresentCreature",15);
}
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.

NWScript :
void main()
{
SetLocalString(GetPCSpeaker(),"Creature","goblin");
}
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'aurai fait une grosse bourde sur l'incrémentation ? Embarassed
_________________
b-612.yi.org (chez moi) | tetrisconcept.com (LE site sur Tetris) | Grospixels (c'était mieux avant) | Geekzone (for and by crazy geeks)

Securom, ça suxe
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
k0rvet
Ecuyer
Inscrit le: 24 Nov 2003
Messages: 67
Répondre en citant
Posté le : 24/12/2003 12:17:00 Sujet du message :

Ok, donc la tu as initialisé correctement ces trois variables, pas de pb.
Mais dans ton script, tu fais la chose suivante:
*essaye d'être clair*

Code :

int NbrHereCreature = GetLocalInt(oPJ,"NbrHereCreature");


- Tu assignes à l'entier NbrHereCreature la valeur contenue dans "NbrHereCreature".
- Ensuite tu incrémentes NbrHereCreature, pas de pb. Mais ca ne vaut pas dire que la valeur contenue dans "NbrHereCreature" a changée. Il faut ensuite faire un
Code :

SetLocalInt(oPJ, "NbrHereCreature", NbrHereCreature);


La tu aura modifié le contenu de ta variable locale.

En fait, pour pas te planter, quand tu assignes le contenu d'une variable à une autre variable que tu as déclarée, change de nom:

Exemple:
Code :

int iNbrHereCreature = GetLocalInt(oPJ,"NbrHereCreature");
iNbrHereCreature++;
SetLocalInt(oPJ, "NbrHereCreature", iNbrHereCreature);


Pour des variables de type int, mets ixxx pour les strings, sxxx etc... Ca évitera des confusions.

Amicalement.

[edit] code pas bon Embarassed
_________________
Moi j'dis ca, mais bon j'dis rien hein?
..:: Les Chroniques de la Terre du Milieu ::..
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
PetitPrince
Super-Mouton
Inscrit le: 12 Sep 2002
Messages: 2043
Localisation: Asteroïde B-612 actuellement crashé en Suisse
Répondre en citant
Posté le : 24/12/2003 12:52:00 Sujet du message :

Merci bien. l'incrémentation marche (le reste *hum*... mais c'est des trucs basiques)


k0rvet a écrit :

Pour des variables de type int, mets ixxx pour les strings, sxxx etc... Ca évitera des confusions.
Ouioui, d'ailleurs

Citation :
string s09 = IntToString(d10());
object oWaySpawn = GetWaypointByTag("SpawnMonstre_0"+s09);
object oPJ = GetFirstPC();
string sCreature = GetLocalString(oPJ,"Creature");
Very Happy (oui, je suis en fainéant)(maisjepensaispasqueçaposeraitautantdeproblèmedonc)
_________________
b-612.yi.org (chez moi) | tetrisconcept.com (LE site sur Tetris) | Grospixels (c'était mieux avant) | Geekzone (for and by crazy geeks)

Securom, ça suxe
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Cassin
Papa-poule(t) & poissard intemporel
Inscrit le: 16 Sep 2002
Messages: 7471
Localisation: 6 bis rue de la Couveuse, Poulailler 39b
Répondre en citant
Posté le : 06/01/2004 14:24:44 Sujet du message :

/me débarque après la bataille Embarassed

Alors qu'en est-il ? Le problème est-il résolu ?
_________________
Aventure ! Camaraderie ! Et acier sur acier ! Les ingrédients légendaires ! Hein Bouh ?

http://cassin1306.spaces.live.com
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
PetitPrince
Super-Mouton
Inscrit le: 12 Sep 2002
Messages: 2043
Localisation: Asteroïde B-612 actuellement crashé en Suisse
Répondre en citant
Posté le : 06/01/2004 18:44:14 Sujet du message :

Ca incrémente correctement, il arrête un peu près comme je veux, mais ça me spawne trop Sad (cf. mail que je t'ai envoyé).
_________________
b-612.yi.org (chez moi) | tetrisconcept.com (LE site sur Tetris) | Grospixels (c'était mieux avant) | Geekzone (for and by crazy geeks)

Securom, ça suxe
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Cassin
Papa-poule(t) & poissard intemporel
Inscrit le: 16 Sep 2002
Messages: 7471
Localisation: 6 bis rue de la Couveuse, Poulailler 39b
Répondre en citant
Posté le : 07/01/2004 10:32:54 Sujet du message :

OK, donc j'essaierais de voir ce que je peux faire...

En ce moment je suis en train de refaire le XPModule en version NwN only (puisqu'on ne peut malheureusement pas revenir en arrière, même en supprimant les éléments des add-ons Sad ), avec quelques petites modifs, donc je me pencherais sur la question... Wink
_________________
Aventure ! Camaraderie ! Et acier sur acier ! Les ingrédients légendaires ! Hein Bouh ?

http://cassin1306.spaces.live.com
 
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 70.384ms