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 16:03:13


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
decad7
Acolyte
Inscrit le: 27 Avr 2004
Messages: 22
Répondre en citant
Posté le : 28/04/2004 15:58:02 Sujet du message : Comment faire apparaitre un object dans un coffre ?

Bonjour,

J'aimerais pouvoir faire apparaitre un objet dans un coffre quand un personnage rentre dans une zone.
Deplus pour corcer le tout j'ai besoin que l'objet dans le coffre soit différent en fonction de la classe du personnage ayant le plus haut niveau.

Merci d'avance.

Parce que la je coince franchement... Crying or Very sad
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Joubinator
Ecuyer
Inscrit le: 07 Jan 2003
Messages: 42
Localisation: Yvelines
Répondre en citant
Posté le : 28/04/2004 16:19:26 Sujet du message :

Pourquoi ne pas plutot le OnOpen de ton coffre pour faire apparaitre l'objet dans le coffre. Car les objets dans un coffre ne sont pas visibles de l'exterieur Shocked

Voici une base pour créer des objets dans un coffre.
Il faudrait ensuite y ajouter des conditions selon la classe des perso...
du style :

if (classe du perso = Guerrier)
Créer tel objet
if (classe du perso = Mago)
créer tel autre objet

etc.....

NWScript :
//A placer dans le OnOpen du Contenant


//Attention aux tags des objets


void main()
{
CreateItemOnObject(OBJECT_TYPE_ITEM , "objet_que_vous_voulez", OBJECT_SELF, 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.









2-A placer dans le OnClose du contenant


NWScript :
//A placer dans le OnClose du contenant


void main()
{
object item = GetFirstItemInInventory(OBJECT_SELF);

while (GetIsObjectValid(item)) // boucle qui vide l'inventaire
{
DestroyObject(item);
item = GetNextItemInInventory(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.


En espérant t'avoir mis sur la bonne voie Very Happy
_________________
M'enfous si les pjs tuent mes monstres,.... j'en ai plein (paroles d'un DM d'expérience Wink )
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
decad7
Acolyte
Inscrit le: 27 Avr 2004
Messages: 22
Répondre en citant
Posté le : 28/04/2004 16:28:51 Sujet du message :

effectivement je suis d'accord pour ce qui est de la création de l'objet dans le contenant.
déja un problème de résolu.

Cependant mon autre problème viens du fait que si un personnage est niveau 8 guerrier et 2 mage.
comment je fais pour savoir qu'il a 8 niveau de guerrier et que 2 niveau de mage, afin de mettre un objet interressant pour les guerriers dans le coffre.

deplus ce test il faut que je le fasse pour chaque classe ...? mais comment ?

Merci encore.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Joubinator
Ecuyer
Inscrit le: 07 Jan 2003
Messages: 42
Localisation: Yvelines
Répondre en citant
Posté le : 29/04/2004 08:43:10 Sujet du message :

J'ai juste le temps de te mettre sur la voie car en plus je n'ai jamais eu à utiliser ces fonctions :

Pour détecter une classe de pj il faut utiliser la fonction :

GetLevelByClass(CLASS_TYPE_PALADIN,oPj) > 10
// pour détecter un paladin de niveau 11 et plus

ou il exisste aussi

GetLevelByPosition(1, oPj)
//pour détrecter le niveau de la premiere classe du pj

ou

#include "NW_I0_GENERIC" // ne pas oublie le include pour cette derniere version
GetCharacterLevel(oPj)

bon courage mais tu dois tout avoir maintenant Very Happy
_________________
M'enfous si les pjs tuent mes monstres,.... j'en ai plein (paroles d'un DM d'expérience Wink )
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
decad7
Acolyte
Inscrit le: 27 Avr 2004
Messages: 22
Répondre en citant
Posté le : 30/04/2004 02:53:06 Sujet du message :

J'ai toujours quelques problème.

je n'arrive pas a faire en sorte de savoir qu'elle classe du personnage est la plus haute.
Je galère vraiment alors si quelqu'un connait la solution.

si vous pouvez m'indiquer la marche a suivre Crying or Very sad

Merci d'avance a tout le monde.
et merci a toi Joubinator, j'ai quand même bien avancé.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Aladhia
Voyageur
Inscrit le: 02 Mai 2004
Messages: 1
Répondre en citant
Posté le : 02/05/2004 13:21:23 Sujet du message :

Bonjour, j'ai fait plusieur recherche un peu sur le net et je trouve pas , je m'essoufle je commence a en avoir marre de chercher lol, alors si quelqun avait une solution pour moi Smile ?

J'ai un monde persistant et je cherche un script a mettre sur mes coffres pour qu'il respawn regulierement sans avoir a faire un reboot du serveur pour que le script de base nw_o2_classmed par exemple soit relancer.

Je ne cherche pas a faire reaparaitre une épée +1 par exemple toute les demi heure, mais simplement que le script aleatoire selon la classe la soit relancer dans le contenu du coffre ?

Merci d'avance !! Smile
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Joubinator
Ecuyer
Inscrit le: 07 Jan 2003
Messages: 42
Localisation: Yvelines
Répondre en citant
Posté le : 06/05/2004 10:13:11 Sujet du message :

Alors Decad7, tu coinces, je ne sais pas si tu as pu actuellement terminer ton script mais je viens de relire le topic et je crois que la solution à ton pb est dans cette commande déjà citée : GetLevelByPosition(1, oPj)

Il me semble cque cette commande rapporte le niveau de la 1° classe du pj.
Si tu mets un 2 dans la commande GetLevelByPosition(2, oPj), il se pourrait bien que l'ordi cherche le niveau de la 2° classe du pj ... Surprised

Comme je n'ai encore jamais utilisé cette commande je ne suis certain de rien, mais bon c'est en cherchant que l'on trouve Ed

Donc si j'imagine ton script je le verrai bien constuit comme suit :


//D'abord déterminer laquelle des classe à le plus haut niveau
int iNiveauClasse1 = GetLevelByPosition(1, oPj);
int iNiveauClasse2 = GetLevelByPosition(2, oPj);

if (iNiveauClasse1<iNiveauClasse2)
{
alors ne prendre en compte que la classe correspondant au niveau le plus éléve
}
else
{
prendre en compte l'autre classe
}

Si j'approche de la bonne solution , il ne reste plus qu'a maintenant gere le script comme tu le souhaites car on ne considere plus qu'une seule classe...

Je ne puis t'en dire plus, car je ne me suis jamais servi de ces commandes.
Par contre cherche avec Aurora des commandes comportent le mot Level, ou Class... y a peut être une commande qui fait ce que tu cherches. (Cherches ces commandes en ayant mis le include #include "NW_I0_GENERIC" )

Bon courage Very Happy
_________________
M'enfous si les pjs tuent mes monstres,.... j'en ai plein (paroles d'un DM d'expérience Wink )
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
decad7
Acolyte
Inscrit le: 27 Avr 2004
Messages: 22
Répondre en citant
Posté le : 06/05/2004 14:37:37 Sujet du message :

JE vous remerci pour toute l'aide que vous m'apportez.

effectivement je crois que ce script et la seule solution au problème.
NWScript :

int iNiveauClasse1 = GetLevelByPosition(1, oPj);
int iNiveauClasse2 = GetLevelByPosition(2, oPj);

if (iNiveauClasse1<iNiveauClasse2)
{
alors ne prendre en compte que la classe correspondant au niveau le plus éléve
}
else
{
prendre en compte l'autre classe
}
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.


Mais bon j'ai bien peur que cela face un Script énormément long parcequ'il y a plus de 15 classes de personnages (avec les classes de prestiges) et chaque joueur peut avoir 3 classes de personnage donc déja il faut trouver la classe ayant le plus haut niveau des trois.

Puis ensuite trouver de quelle classe il s'agit.
soit Plus de 15 controle pour Si c'est la classe 1
puis encore 15 controle si c'est la classe 2
etc...

Je fais essayer d'écrire le script mais j'ai peur qu'il ralentisse considérablement pendant un petit temps le jeu.

On verra bien ca.
Si quelqu'un trouve une autre solution qu'il me le dise.

Merci encore
@+
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Joubinator
Ecuyer
Inscrit le: 07 Jan 2003
Messages: 42
Localisation: Yvelines
Répondre en citant
Posté le : 07/05/2004 08:17:31 Sujet du message : Peut être bien une bonne solution pour toi

voila le script que j'ai fait en m'aidant du Lexicon.
Attention pas testé, donc des fautes peuvent se cacher Confused , cependant l'idée du script me semble conforme à ton besoin. (si quelqu'un à une autre idée qu'il n'hésite pas je ne suis pas succeptible Cool )


NWScript :
void main()
{
  object oPj = GetLastOpener();
  int iNiv1 = GetLevelPosition(1,oPj);
  int iNiv2 = GetLevelPosition(2,oPj);
  int iNiv3 = GetLevelPosition(3,oPj);

if (!GetIsPC(oPj)) return; // si l'ouvreur n'est pas un joueur alors on stoppe le script


//Le niveau le plus haut est soit iNiv1, iNiv2 ou iNiv3



if ( iNiv1 >= iNiv2 && iNiv1 >= iNiv3)
  {
  int iClassePj = GetClassbyPosition(1,oPj);
  }

if ( iNiv2 >= iNiv1 && iNiv2 >= iNiv3)
  {
  int iClassePj = GetClassbyPosition(2,oPj);
  }

if ( iNiv3 >= iNiv1 && iNiv3 >= iNiv2)
  {
  int iClassePj = GetClassbyPosition(3,oPj);
  }



// cette variable avec les classes possibles du jeu

if (iClassePj == CLASS_TYPE_ARCANE_ARCHER)
      {
alors patati, patata
      }
else if (iClassePj == CLASS_TYPE_BARBARIAN)
      {
alors patati, patata
      }

}
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 le script est correct, je te laisse finir le script en complétant les comparaisons selon les classes.
Par contre je ne sais pas comment sont gérées les classes de prestiges Surprised , je te laisse donc la surprise Very Happy , toutefois dans le doute la premiere classe que j'ai placer dans le script est celle de l'archer mage.

Bonne courage Decad7 Very Happy
_________________
M'enfous si les pjs tuent mes monstres,.... j'en ai plein (paroles d'un DM d'expérience Wink )
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
decad7
Acolyte
Inscrit le: 27 Avr 2004
Messages: 22
Répondre en citant
Posté le : 07/05/2004 14:53:52 Sujet du message :

Merci pour ce script.

je vais essayer de la faire aujourd'hui et je vous direz si ca marche.
je vous le mettrer ici une fois entiérement fini.

A tout a l'heure Smile
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
micka
Grand Sage du Conseil
Inscrit le: 29 Aoû 2003
Messages: 884
Localisation: /dev/null
Répondre en citant
Posté le : 07/05/2004 15:53:55 Sujet du message :


decad7 a écrit :
//Détermination du niveau le plus haut chez le pj
//Le niveau le plus haut est soit iNiv1, iNiv2 ou iNiv3
//La variable iClassePj va réprésenter la classe ayant
// le niveau le plus élévé.
Pas tout à fait. Ça marche si les 2 (ou 3) plus hautes classes ont des valeurs différentes.
Dans le cas ou les deux premières classes ont le même nombre de niveaux, cela renvoie arbitrairement la première classe.
(oui, je sais, je suis un em...)


decad7 a écrit :
Par contre je ne sais pas comment sont gérées les classes de
prestiges Surprised , je te laisse donc la surprise Very Happy , toutefois dans le
doute la premiere classe que j'ai placer dans le script est celle de
l'archer mage.
exactement comme pour les autres classes. C'est pour ça que plutôt que d'utiliser les valeurs numériques, je conseille d'utiliser les constantes (celle des 2da) CLASS_TYPE_*, comme dans l'algo montré plus haut d'ailleurs.
Et ajoute un else, c'est toujours plus robuste (il y a toujours des cas non prévus, comme quelqu'un qui se pointera avec un samuraï).

Enfin (et surtout), pour un test avec autant de cas, plutôt que des
if..else if à la suite, je pense qu'il vaut mieux utiliser des case (switch/case en nwscript)

NWScript :

switch( iClassePj )
{
case CLASS_TYPE_BARBARIAN:
  // je sais pas moi
  break;
case CLASS_TYPE_ARCANEARCHER:
  // ?
break;
.....
default:
  // tant pis pour lui, il aura rien
  break;
}
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.
 
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 42.25ms