
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.







La date/heure actuelle est 01/05/2025 03:57:00
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
mork Seigneur Messages: 205 Localisation: A landeda, pres de brest |
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 | ![]() ![]() ![]() ![]() |
mork Seigneur Messages: 205 Localisation: A landeda, pres de brest |
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 | ![]() ![]() ![]() ![]() |
Enki Légende vivante ![]() Messages: 432 |
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 :
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); 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 :
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; } 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 :
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. ![]() 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 | ![]() ![]() ![]() |
mork Seigneur Messages: 205 Localisation: A landeda, pres de brest |
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)); } } 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 | ![]() ![]() ![]() ![]() |
Enki Légende vivante ![]() Messages: 432 |
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 } |
Revenir en haut | ![]() ![]() ![]() |
mork Seigneur Messages: 205 Localisation: A landeda, pres de brest |
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)); } |
Revenir en haut | ![]() ![]() ![]() ![]() |
Enki Légende vivante ![]() Messages: 432 |
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 :
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 :
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 | ![]() ![]() ![]() |
mork Seigneur Messages: 205 Localisation: A landeda, pres de brest |
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 {} */ et ca compile pas la (a la fin) NWScript :
}/* suspect block end found !*/
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 {} */ |
Revenir en haut | ![]() ![]() ![]() ![]() |
Enki Légende vivante ![]() Messages: 432 |
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/ Il y a d'autres erreurs, je regarde et je te les fais savoir. |
Revenir en haut | ![]() ![]() ![]() |
Enki Légende vivante ![]() Messages: 432 |
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))); } } } } Et voilà ! |
Revenir en haut | ![]() ![]() ![]() |
mork Seigneur Messages: 205 Localisation: A landeda, pres de brest |
Enki a écrit : Ces deux lignes ne vont pas :
Salut Enki,
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/ Il y a d'autres erreurs, je regarde et je te les fais savoir. 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 | ![]() ![]() ![]() ![]() |
mork Seigneur Messages: 205 Localisation: A landeda, pres de brest |
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 ![]() 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 } 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 ![]() 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))); } } } } |
Revenir en haut | ![]() ![]() ![]() ![]() |
mork Seigneur Messages: 205 Localisation: A landeda, pres de brest |
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 | ![]() ![]() ![]() ![]() |
Enki Légende vivante ![]() Messages: 432 |
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 } } 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 | ![]() ![]() ![]() |
marneus Chevalier ![]() Messages: 89 Localisation: devant mon pc ... surment |
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 | ![]() ![]() ![]() |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
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 | ![]() ![]() ![]() ![]() ![]() |
Enki Légende vivante ![]() Messages: 432 |
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 | ![]() ![]() ![]() |
mork Seigneur Messages: 205 Localisation: A landeda, pres de brest |
slt
pti poste tape vite fait : Le pj perds tout son equipement et toute l'xp an arrive sur le mod @+ |
Revenir en haut | ![]() ![]() ![]() ![]() |
Enki Légende vivante ![]() Messages: 432 |
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 | ![]() ![]() ![]() |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
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 | ![]() ![]() ![]() ![]() ![]() |
mork Seigneur Messages: 205 Localisation: A landeda, pres de brest |
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); } } Voila ! |
Revenir en haut | ![]() ![]() ![]() ![]() |
Djezebel Héros ![]() Messages: 252 |
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); } } Voilà donc ![]() Il faudrait peut-être, si tu ne veux que ça ne se passe qu'au niveau un, que tu fasses juste une condition 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. (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 | ![]() ![]() ![]() |
mork Seigneur Messages: 205 Localisation: A landeda, pres de brest |
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); } } Donc, ca donne ca ? |
Revenir en haut | ![]() ![]() ![]() ![]() |
Djezebel Héros ![]() Messages: 252 |
J'avais fais une erreur, j'ai corrigé
![]() C'est GetHitDice ![]() 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 :
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 | ![]() ![]() ![]() |
mork Seigneur Messages: 205 Localisation: A landeda, pres de brest |
Ca compile pas oO
|
Revenir en haut | ![]() ![]() ![]() ![]() |


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