La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 01/05/2025 03:57:00


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
mork
Seigneur
Inscrit le: 12 Aoû 2005
Messages: 205
Localisation: A landeda, pres de brest
Répondre en citant
Posté le : 31/12/2005 23:13:10 Sujet du message : Script de teleportation au lvl 1

Je voudrais que lorsque pj1 entre sur le module, donc il est au lvl 1, sur le point de depart se trouve un Triggers qui fait que lorsque pv1 (lvl 1) se teleporte a un WayPoint et sois aveugle (pendant 20 secondes) a ce WayPoint et ait aquis 2 lvls (donc pj1 est lvl 3) et 2000 po, sachant qu'il perd tout son equipement en arrivant sur le serveur. Je voudrais aussi qu'il soit equipe de la robe a vec ce tag : "ci_robe_depart".

Voila, j'espere avoir ete clair ...

Mork
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
mork
Seigneur
Inscrit le: 12 Aoû 2005
Messages: 205
Localisation: A landeda, pres de brest
Répondre en citant
Posté le : 01/01/2006 11:44:59 Sujet du message :

A oui, j'avais oublie ; en arrivant au WayPoint, il est aveugle, mais j'aimerais bien aussi qu'il soit allonge par terre ...
Et si vous pouviez me dire comment rajouter des objets en plus de la robe dans le script, ce serais sympas, merci !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 02/01/2006 14:24:52 Sujet du message : Tutorial

Bonjour Mork,
au stade où tu en es, j'ai décidé de ne pas te donner les scripts que tu demandes.
Mais plutôt de t'expliquer comment faire, dans la mesure où ils sont assez simples.

Je pense qu'il est plus simple d'utiliser deux triggers au lieu d'un seul : un à l'endroit où les joueurs arrivent quand ils se connectent, un autre sous le waypoint où ils se téléportent.
Je dois t'avouer que je ne comprends pas l'intérêt de faire une zone où les PJs arrivent pour se téléporter à un waypoint directement. A moins que tu ne souhaites qu'ils se téléportent à un endroit différent selon leur classe, race, dieu ou sexe par exemple...
Mais je vais respecter tes consignes.

- Donc en premier lieu, tu places ton trigger n°1 sous le point de départ de ton PJ.
- Puis, tu places où tu veux (dans la même zone, où dans une autre) le waypoint auprès duquel il se téléporte.
- En dessous, mets le trigger n°2.
- Enfin, tu édites dans la palette une robe avec le tag que tu veux MAIS avec le ResRef "ci_robe_depart". Si tu veux que le joueur ait d'autres vêtements (casques, armes, gants, etc...) tu dois suivre la même procédure.

Maintenant, tu peux faire les scripts nécessaires.

Les deux scripts que tu vas faire se placent dans le OnEnter de chaque trigger.

Pour le trigger n°1, ce qui t'intéresse, c'est de rendre le PJ aveugle et de le téléporter au waypoint avec le trigger n°2.

Quand on fait un script, on doit d'abord déclarer ses variables. La première variable est généralement l'objet qui fait une action ou qui subit un effet donné.
Dans un script OnEnter, c'est normalement celui qui entre.
Ta première variable sera donc un objet qui désigne sous le nom que tu veux celui qui entre. Par convention, mais ce n'est pas obligatoire, quand l'objet que l'on veut appeler est un joueur, on le nomme /oPC/.
Donc, ta première ligne de script, en dessous de
void main()
{
doit être :

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.


Ta deuxième variable (c'est le waypoint où le joueur se téléporte) est toujours un objet :

NWScript :
object oWaypoint=GetWaypointByTag("tag_de_ton_waypoint");
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.


Puis, ensuite tu inscrits les actions que doit faire le joueur et les effets qu'il doit subir (ou les fonctions appelant un effet.)

La première est une fonction qui empêche le joueur de bouger, tout en lui permettant de faire des actions. La plus simple est la fonction suivante :

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.


Cette fonction accepte deux arguments, le premier est l'objet qui subit l'effet cutscene, le deuxième est un entier (int) donc thèoriquement un numéro. Mais ici, cette fonction est binaire et ne reconnait que deux numéros 0 ou 1. Ces numéros sont "codés" sous deux vocables : respectivement FALSE et TRUE.
Donc ta fonction s'écrit ainsi :

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.


La deuxième fonction sert à "rendre aveugle le joueur".

La plus simple est la suivante :

BlackScreen();

Cette fonction n'accepte qu'un seul argument, cet argument est un objet, en l'occurence le PJ qui devient aveugle.

Enfin, la fin de ce script est une fonction que l'on impose au PJ. Il doit se téléporter au waypoint correspondant au tag que tu as déclaré auparavant. Ce waypoint est un objet que j'ai nommé oWaypoint.
Cette fonction n'est pas une action, donc il n'y a pas à attendre pour qu'elle s'exécute, elle se lance en même temps que les deux fonctions précédentes.
Il s'agit de :

JumpToObject();

Cette fonction accepte deux arguments : le premier est l'objet auprès duquel elle téléporte, le deuxième argument est un entier, qui semble ne servir à rien, donc on laisse pour ce deuxième argument la valeur par défaut (1).

Le problème c'est que si on écrit :
NWScript :
JumpToObject(oWaypoint);
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 le trigger qu'elle devrait téléporter, (en fait non, car les triggers ne peuvent pas se téléporter, donc rien ne sera téléporté ...) or ce qui nous intéresse, c'est que le PJ soit téléporté, il faut passé par une fonction qui assigne la fonction JumpToObject(); au PJ. Cette fonction c'est AssignCommand();.
Elle accepte deux arguments, l'objet qui exécute la commande, et la commande en question :
Ici, il faut donc écrire :
NWScript :
AssignCommand(oPC,JumpToObject(oWaypoint));
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.


Voilà pour ton premier script !


Le deuxième script n'est guère plus compliqué, à l'exeption des premières lignes qui correspondent à une fonction créée par Brenon Holmes pour un module particulier. Je te la donne telle quelle, sans l'expliquer, ce serait trop long et inutile. Cette fonction à pour but de déterminer le nombre d'XP nécéssaires pour avoir un level particulier.Elle se place en début de ton deuxième script, avant le void main().

La voici :
NWScript :
///librairie de fonctions pour attribuer un level a un PC,///
///a partir de "contest of champion" de Brenon Holmes ////
int GetXPRequiredForLevel(int nLevel )
{
    int nRequiredXP;
    int nCount;

    nRequiredXP = 0;

    for ( nCount = 1; nCount <= nLevel; nCount++ )
    {
        nRequiredXP += 1000 * (nCount - 1);
    }
    return nRequiredXP;
}
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.


Pour ton deuxième script, tu dois faire comme pour le premier, déclarer tes variables.

La première est toujours le PJ qui subit l'acion (celui qui entre).

La deuxième est encore un objet, c'est la robe que ton PJ va porter, il faut demander au script de créer cette robe sur le PJ. C'est la fonction :
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.

Cette fonction reçoit trois arguments, le ResRef de l'objet que tu veux créer (string), l'objet (lePJ) sur lequel tu veux que l'objet soit créer (object) , et le nombre d'objets à créer (int).

Ce qu'il faut comprendre, là encore, c'est que cette fonction ne renvoie pas à une action, mais directement à un objet. En déclarant cette variable tu déclares en fait que tu veux créer un objet oItem sur l'objet oPC.
Donc tu écris :
NWScript :
object oRobe=CreateItemOnObject("ci_robe_depart",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.


Si tu veux rajouter des items sur lPJ, il suffit que tu déclare une autre variable, par exemple oCasque, avec pour ResRef la string "ci_casque_depart" par exemple.

Ta troisième variable est une variable de type int (donc un nombre entier) qui correspond au nombre de level que tu veux que ton PJ ait (ici 2). Cette variable fait appel à la fonction prédéfinie au début du script : int GetXPRequiredForLevel(int nLevel );

Donc tu donne un nom à cette variable, par exemple :

nRequiredXP

et comme argument, tu écris (2).

Voilà pour les variables du deuxième script.

Maintenant les fonctions et les actions.

La première fonction ramène le PJ aux nombre d'XP nécessaires pour être level 2 :

Cette fonction c'est
SetXP();
Elle reçoit un argument de type objet, le Pj à on attribu une quantité d'XP, et une variable de type int, mais comme tu ne sais pas à l'avance combien il faut d'XP pour être level 2, à la place de l'argument tu inscrit le nom de la variable déclarée au dessus (nRequiredXP) au lieu d'un nombre donné.

La fonction suivante est très simple c'est

GiveGoldToCreature();

Là je pense que tu as compris comment cela marche, donc tu remplis tout seul les arguments.

Puis, il faut que tu assigne à ton PJ deux actions, dans un ordre précis.

Il faut d'abord que ton PJ s'équipe de la robe que tu lui as donnée.

La fonction utilisé est
ActionEquipItem();
Cette fonction reçoit deux arguments, l'objet qui doit être équipé, et l'endroit (le slot) où il faut le mettre.

L'argument slot est de type int (donc un numéro) mais comme les gars de bioware sont sympas avec nous, ils ont "codé" ces numéros par des constantes (INVENTORY_SLOT_*) Il suffit alors de choisir l'emplacement pour une robe, à savoir INVENTORY_SLOT_CHEST.

La deuxième action est une animation qui fait que ton PJ se retrouve allongé par terre.

Tu dois l'assigner à ton PC juste après.

Cette action est :

ActionPlayAnimation();

Elle reçoit plusieurs arguments également.

Le premier, toujours un entier (int), est encore un numéro codé derrière
une constante, ici on va prendre :

ANIMATION_LOOPING_DEAD_BACK

Le deuxième argument est de type float (un chiffre avec une virgule) tout comme le troisième.

Il correspond à la vitesse à laquelle l'animation est exécuté.
Le troisième correspond à la durée de l'animation, je te conseille un peu plus de 20 secondes (22.0).


Enfin, il faut rappeler deux des fonctions du premier script afin de les annuler, mais avec un delai.
Pour introduire un delai, rien de plus simple, il faut utiliser la fonction

DelayCommand();

Pour le premier argument (float) tu précises le delai en question tu voulais 20 secondes (20.0), (je trouve que c'est long, mais à toi de voir).
Puis pour le deuxième, la fonction qui doit être retardée.
Ici, il faut utiliser FadeFromBlack(); (Cela ressemble au titre d'une chanson de hard-rock ...). Cette fonction requiert deux arguments, le plus important est le premier, à savoir le joueur à qui cette fonction s'applique, laisse le deuxième par défaut (ne mets rien).


Tu écris donc :
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.


Pour la deuxième fonction, c'est le

SetCutsceneMode();

Que tu mets en FALSE pour le deuxième argument, toujours avec un delai de 20 secondes.

Voilà, à ce point, tes scripts sont terminés. Cependant, j'ai volontairement oublié quelque chose pour te faire réfléchir un peu. Laughing
Quand tu auras trouvé, ou si tu ne comprends pas quelques chose, réponds à ce message, je le surveillerai.
A bientôt !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
mork
Seigneur
Inscrit le: 12 Aoû 2005
Messages: 205
Localisation: A landeda, pres de brest
Répondre en citant
Posté le : 02/01/2006 18:30:26 Sujet du message :

Salut Enki,
[quote=Enki]au stade où tu en es, j'ai décidé de ne pas te donner les scripts que tu demandes.
Mais plutôt de t'expliquer comment faire, dans la mesure où ils sont assez simples.
[/quote]
Oui, lol, je sais je suis vraiment pas doue du tout en script ...

Bon, voila ce que "donne" le script n°1 (qui compile pas d'ailleur ^^)

NWScript :
void main()
{
    object oPc=GetEnteringObject();
    object oWaypoint=GetWaypointByTag("ci_waypoint_depart");
    {
SetCutsceneMode(oPC,TRUE);
BlackScreen();
AssignCommand(oPC,JumpToObject(oWayPoint));

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


Ca compile pas ici :
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.


(pour m'ameliorer un piti peu en scripts, je vais essayer de lire le tutorial ^^)
@+
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 02/01/2006 18:38:08 Sujet du message : Bon début !

Ce que je voulais dire, c'est que tu étais assez impliqué dans la confectioàn de module, vue les messages que tu postes, pour devenir autonome. Il y a deux petites erreurs :

NWScript :
void main()
{
object oPc=GetEnteringObject();
object oWaypoint=GetWaypointByTag("ci_waypoint_depart");
{ /// inutile
SetCutsceneMode(oPC,TRUE);
BlackScreen(oPC);
AssignCommand(oPC,JumpToObject(oWayPoint));

} /// inutile
}
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
 
mork
Seigneur
Inscrit le: 12 Aoû 2005
Messages: 205
Localisation: A landeda, pres de brest
Répondre en citant
Posté le : 02/01/2006 18:45:33 Sujet du message :

Donc, si j'ai bien copris, ca devient ca ? :
NWScript :
void main()
{
object oPc=GetEnteringObject();
object oWaypoint=GetWaypointByTag("ci_waypoint_depart");
SetCutsceneMode(oPC,TRUE);
BlackScreen(oPC);
AssignCommand(oPC,JumpToObject(oWayPoint));

}
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é MSN Messenger Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 02/01/2006 20:02:31 Sujet du message : Une erreur en plus !

Je suis distrait, pardonne-moi, et je n'ai pas vue une erreur minime, lors de mon précédent post :

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.


la variable /oPc/ doit être en majuscule pour les deux dernières lettres : /oPC/

Et la variable oWayPoint dans cette ligne :

NWScript :
AssignCommand(oPC,JumpToObject(oWayPoint));
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.


n'a pas elle aussi une "orthographe" identique à la variable déclarée au dessus :

remplace par :

NWScript :
AssignCommand(oPC,JumpToObject(oWaypoint));
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à, tout devrait bien compiler.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
mork
Seigneur
Inscrit le: 12 Aoû 2005
Messages: 205
Localisation: A landeda, pres de brest
Répondre en citant
Posté le : 03/01/2006 17:37:35 Sujet du message :

Salut,
Le script n° 1 marche, par contre le deux compile pas et ja comprends pas pk

Voila le script (j'avais deja un autre script avant)

NWScript :
void main()
{
object oPC = GetEnteringObject();

// Mettre le tag de votre perso
object oNPC = GetNearestObjectByTag("ci_marin_nain_001");

// Trouvez le Npc. Il est peut etre mort..
if (GetIsObjectValid(oNPC)) {


if (!IsInConversation(oNPC)) {

// stop les actions en cours du Npc.
AssignCommand(oNPC, ClearAllActions());

// Faire marcher le Npc vers le joueur. Si vous voulez que le npc court, changez la variable par true.
AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE));

// Pour que le Npc parle au joueur.
AssignCommand(oNPC, ActionStartConversation(oPC));
}
{
object oRobe=CreateItemOnObject("ci_robe_depart",oPC);
object oCreature=GiveXPToCreature(oPC, 3000);
GiveGoldToCreature(oPc,2000);
ActionPlayAnimation(ANIMATION_LOOPING_DEAD_BACK );
ActionEquipItem(INVENTORY_SLOT_CHEST);
DelayCommand(5.0,FadeFromBlack(oPC));
DelayCommand(20.0,SetCutsceneMode(oPC));

}
/* warning: 2 unclosed block {} */
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 ca compile pas la (a la fin)
NWScript :
}/* suspect block end found !*/
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.

Je pensais que c'etait parcequ'il y avait 2 "}"
Donc j'ai mit comme ca :

NWScript :
void main()
{
object oPC = GetEnteringObject();

// Mettre le tag de votre perso
object oNPC = GetNearestObjectByTag("ci_marin_nain_001");

// Trouvez le Npc. Il est peut etre mort..
if (GetIsObjectValid(oNPC)) {


if (!IsInConversation(oNPC)) {

// stop les actions en cours du Npc.
AssignCommand(oNPC, ClearAllActions());

// Faire marcher le Npc vers le joueur. Si vous voulez que le npc court, changez la variable par true.
AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE));

// Pour que le Npc parle au joueur.
AssignCommand(oNPC, ActionStartConversation(oPC));
{
object oRobe=CreateItemOnObject("ci_robe_depart",oPC);
object oCreature=GiveXPToCreature(oPC, 3000);
GiveGoldToCreature(oPc,2000);
ActionPlayAnimation(ANIMATION_LOOPING_DEAD_BACK );
ActionEquipItem(INVENTORY_SLOT_CHEST);
DelayCommand(5.0,FadeFromBlack(oPC));
DelayCommand(5.0,SetCutsceneMode(oPC));

}
/* warning: 3 unclosed block {} */
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é MSN Messenger Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 03/01/2006 17:55:07 Sujet du message : Quelques erreurs pour l'instant.

Ces deux lignes ne vont pas :

NWScript :
object oCreature=GiveXPToCreature(oPC, 3000);
GiveXPToCreature(oPC, 3000);
GiveGoldToCreature(oPc,2000); //Il y a comme pour le premier script une erreur d'"orthographe" remplace /oPc/ par /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.

Il y a d'autres erreurs, je regarde et je te les fais savoir.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 03/01/2006 18:17:13 Sujet du message : La solution !

Essaie ce script, il doit marcher, il y a juste une omission de ma part, pour que tu te rende compte tout seul de ce qui ne va pas.


NWScript :
void main()
{
object oPC = GetEnteringObject();
object oNPC = GetNearestObjectByTag("ci_marin_nain_001");
if (GetIsPC(oPC)) /// il faut que celui qui entre dans le trigger soit un joueur
{
if (GetIsObjectValid(oNPC)) /// cela ne sert rien  mon avis
{
if (!IsInConversation(oNPC)) /// cela ne sert rien  mon avis
{
AssignCommand(oNPC, ClearAllActions());

//AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE)); //    il faut le mettre avec un delayCommand

//AssignCommand(oNPC, ActionStartConversation(oPC));       //    il faut le mettre avec un delayCommand

object oRobe=CreateItemOnObject("ci_robe_depart",oPC);

GiveXPToCreature(oPC, 3000);
GiveGoldToCreature(oPC,2000);
AssignCommand(oPC,ActionEquipItem(oRobe,INVENTORY_SLOT_CHEST)); // il faut l'assigner au joueur et il doit d'abord s'habiller
AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_DEAD_BACK,1.0,20.0 )); // il faut l'assigner au joueur
DelayCommand(5.0,FadeFromBlack(oPC));
DelayCommand(20.0,SetCutsceneMode(oPC,FALSE)); // il ne faut pas oublier de mettre FALSE

DelayCommand(20.0,AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE)));
DelayCommand(20.0, AssignCommand(oNPC, ActionStartConversation(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 voilà !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
mork
Seigneur
Inscrit le: 12 Aoû 2005
Messages: 205
Localisation: A landeda, pres de brest
Répondre en citant
Posté le : 03/01/2006 20:26:51 Sujet du message : Re: Quelques erreurs pour l'instant.


Enki a écrit :
Ces deux lignes ne vont pas :

NWScript :
object oCreature=GiveXPToCreature(oPC, 3000);
GiveXPToCreature(oPC, 3000);
GiveGoldToCreature(oPc,2000); //Il y a comme pour le premier script une erreur d'"orthographe" remplace /oPc/ par /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.

Il y a d'autres erreurs, je regarde et je te les fais savoir.
Salut Enki,
POur le "object oCreature ..." j'avais essaye de le faire tout seul, m'enfin, comme ca je referais plus d'erreur ^^.

Pour le reste, pour que le pnj nain parle tout seul au pj, j'avais bien mit dans un trigger ect ...

Merci et @ +
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
mork
Seigneur
Inscrit le: 12 Aoû 2005
Messages: 205
Localisation: A landeda, pres de brest
Répondre en citant
Posté le : 03/01/2006 20:45:49 Sujet du message :

Hé hé, je viens de trouver quelques erreurs:
Lorsque je lancer, on se teleporte bien au Waypoint, sauf qu'on a pas la robe ni l'xp et encore moin les po !
J'ai donc essaye d'arranger tout ca tout seul !
Et ca marche Smile

Donc ca donne ca pour le script n°1 :

NWScript :
void main()
{
object oPC=GetEnteringObject();
object oWaypoint=GetWaypointByTag("ci_waypoint_depart");
object oRobe=CreateItemOnObject("ci_robe_depart",oPC);
AssignCommand(oPC,ActionEquipItem(oRobe,INVENTORY_SLOT_CHEST)); // il faut l'assigner au joueur et il doit d'abord s'habiller
GiveXPToCreature(oPC, 3000);
GiveGoldToCreature(oPC,2000);
SetCutsceneMode(oPC,TRUE);
BlackScreen(oPC);
AssignCommand(oPC,JumpToObject(oWaypoint));
DelayCommand(9.0,FadeFromBlack(oPC));
DelayCommand(9.0,SetCutsceneMode(oPC,FALSE)); // il ne faut pas oublier de mettre FALSE
}
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 le script n°2 (le pnj nain parle pas, je vais essayer de voir pour ca, ou si qq comprends pk, ce serait sympas de me le dire Very Happy)

NWScript :
void main()
{
object oPC = GetEnteringObject();
object oNPC = GetNearestObjectByTag("ci_marin_nain_001");
if (GetIsPC(oPC)) /// il faut que celui qui entre dans le trigger soit un joueur
{
if (GetIsObjectValid(oNPC)) /// cela ne sert rien  mon avis
{
if (!IsInConversation(oNPC)) /// cela ne sert rien  mon avis
{
AssignCommand(oNPC, ClearAllActions());

//AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE)); //    il faut le mettre avec un delayCommand

//AssignCommand(oNPC, ActionStartConversation(oPC));       //    il faut le mettre avec un delayCommand

AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_DEAD_BACK,1.0,20.0 )); // il faut l'assigner au joueuroublier de mettre FALSE

DelayCommand(12.0,AssignCommand(oNPC, ActionMoveToObject(oPC, FALSE)));
DelayCommand(12.0, AssignCommand(oNPC, ActionStartConversation(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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
mork
Seigneur
Inscrit le: 12 Aoû 2005
Messages: 205
Localisation: A landeda, pres de brest
Répondre en citant
Posté le : 04/01/2006 18:41:31 Sujet du message :

Salut Enki,
Je viens de m'appercevoir d'un truc qui "clochait" dans le script, je m'explique :

Lorsque le pj arrive sur le serveur, il est lvl 1 et il tombe sur le trigger donc il est teleporte et arrive lvl 3. Ensuite, lors d'un prochaine connection, il est toujours lvl 3. il retombe sur le trigger, mais, il ne faut pas qu'il soir reteleporte au waypoint, sinon il a encore une robe, encore de l'xp, de l'or ect ... Donc il faudrait qu'il ne se teleporte que au lvl 1.
Merci par avance.
Mork
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 04/01/2006 19:28:50 Sujet du message :

Salut Mork !
Tu as trouvé en partie l'ommission dont je parlais dans mon message précédent.
Si tu es sûr que tes joueurs arrivent sur ton serveur avec un niveau 1, tu peux mettre ce script :

NWScript :
void main()
{

object oPC=GetEnteringObject();
object oWaypoint=GetWaypointByTag("ci_waypoint_depart");
object oRobe=CreateItemOnObject("ci_robe_depart",oPC);
  if (GetHitDice(oPC) == 1)

{


AssignCommand(oPC,ActionEquipItem(oRobe,INVENTORY_SLOT_CHEST)); // il faut l'assigner au joueur et il doit d'abord s'habiller
GiveXPToCreature(oPC, 3000);
GiveGoldToCreature(oPC,2000);
SetCutsceneMode(oPC,TRUE);
BlackScreen(oPC);
AssignCommand(oPC,JumpToObject(oWaypoint));
DelayCommand(9.0,FadeFromBlack(oPC));
DelayCommand(9.0,SetCutsceneMode(oPC,FALSE)); // il ne faut pas oublier de mettre FALSE
}
            }
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.



Pour le deuxième script, il faut s'assurer que si le joueur remarche sur le trigger, l'animation ne se déclenche pas à nouveau.
Voilà !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
marneus
Chevalier
Inscrit le: 17 Oct 2005
Messages: 89
Localisation: devant mon pc ... surment
Répondre en citant
Posté le : 04/01/2006 20:31:40 Sujet du message :

jai une question:
si la personne arrive lvl1, teleporter , gagne l'exp pui qu'il se deco/reco sans avoir fait monter ses lvl; va t'il reagner de l'exp?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 04/01/2006 20:39:24 Sujet du message :

Dans le cas echéant oui.
Le mieu serait de tester l'xp du joueur à l'entrée (if(GetXP(oPC) == 0)) et de lui donner le reste après.
PS : Je préfère la fonction SetXP, je la trouve juste plus maniable après question de points de vue ^^
_________________
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
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 05/01/2006 11:18:26 Sujet du message :

Je suis d'accord avec Ivellios :

SetXp ();

c'est mieux que :

GiveXPToCreature();

De plus, j'ai proposé une fonction de Brenon Holmes qui permet d'attribuer le nombre d'XP nécessaires pour être level X.
A bientôt !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
mork
Seigneur
Inscrit le: 12 Aoû 2005
Messages: 205
Localisation: A landeda, pres de brest
Répondre en citant
Posté le : 05/01/2006 20:02:08 Sujet du message :

slt
pti poste tape vite fait :
Le pj perds tout son equipement et toute l'xp an arrive sur le mod
@+
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Enki
Légende vivante
Inscrit le: 06 Déc 2005
Messages: 432
Répondre en citant
Posté le : 05/01/2006 20:43:06 Sujet du message :

Quel est est le script du OnClientEnter de ton module, du OnModule Load ou encore du OnEnter de ta zone de départ ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 05/01/2006 21:20:36 Sujet du message :

Tu peux t'inspirer de ça (et les sujets à propos de ta question il y en a des tonnes, si tu prenais la peine de chercher...)
_________________
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
 
mork
Seigneur
Inscrit le: 12 Aoû 2005
Messages: 205
Localisation: A landeda, pres de brest
Répondre en citant
Posté le : 06/01/2006 17:05:51 Sujet du message :

Salut !
Voici le script (dans le OnClientEnter) :

NWScript :

void main()
{
  object item;
  object oPC = GetEnteringObject();
  int nGoldToTake = GetGold(oPC);
  int i;

AssignCommand(oPC, TakeGoldFromCreature(nGoldToTake, oPC, TRUE));
while((item = GetNextItemInInventory(oPC)) != OBJECT_INVALID)
                { DestroyObject(item); }

                for(i = 0 ; i <= NUM_INVENTORY_SLOTS ; i++)
                { item = GetItemInSlot(i,oPC); DestroyObject(item);
                                  }
                  }
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.


Voila !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 06/01/2006 19:46:15 Sujet du message :

C'est normal qu'il perde tout son équipement :


NWScript :

void main()
{
object item;
object oPC = GetEnteringObject();
int nGoldToTake = GetGold(oPC);
int i; //Une variable "i"

AssignCommand(oPC, TakeGoldFromCreature(nGoldToTake, oPC, TRUE));
while((item = GetNextItemInInventory(oPC)) != OBJECT_INVALID) //Tant qu'il a un objet dans un inventaire...
{ DestroyObject(item); }

for(i = 0 ; i <= NUM_INVENTORY_SLOTS ; i++)
{ item = GetItemInSlot(i,oPC); DestroyObject(item);
}
}
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.


Voilà donc Smile
Il faudrait peut-être, si tu ne veux que ça ne se passe qu'au niveau un, que tu fasses juste une condition

NWScript :
if (GetHitDice(oPC) == 1)
{
//Reste du script
}
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.

(il me semble que c'est ça)
Dernière édition par Djezebel le 06/01/2006 19:52:02; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
mork
Seigneur
Inscrit le: 12 Aoû 2005
Messages: 205
Localisation: A landeda, pres de brest
Répondre en citant
Posté le : 06/01/2006 19:50:32 Sujet du message :

NWScript :

void main()
{
if (GetXp(oPC) == 0)
{
}
object item;
object oPC = GetEnteringObject();
int nGoldToTake = GetGold(oPC);
int i; //Une variable "i"

AssignCommand(oPC, TakeGoldFromCreature(nGoldToTake, oPC, TRUE));
while((item = GetNextItemInInventory(oPC)) != OBJECT_INVALID) //Tant qu'il a un objet dans un inventaire...
{ DestroyObject(item); }

for(i = 0 ; i <= NUM_INVENTORY_SLOTS ; i++)
{ item = GetItemInSlot(i,oPC); DestroyObject(item);
}
}
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.


Donc, ca donne ca ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 06/01/2006 19:52:46 Sujet du message :

J'avais fais une erreur, j'ai corrigé Smile

C'est GetHitDice Smile
Et normalement, si c'est ce que tu veux, oui c'est ça :
Ca détruit l'inventaire que si le joueur est niveau 1

Ou tu le remplaces par :

NWScript :
GetXP(oPC)== 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.


si tu veux avoir l'expérience exacte
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
mork
Seigneur
Inscrit le: 12 Aoû 2005
Messages: 205
Localisation: A landeda, pres de brest
Répondre en citant
Posté le : 11/01/2006 11:55:24 Sujet du message :

Ca compile pas oO
 
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 106.47ms