La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 23/11/2024 22:03:44
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 |
Lunshire Héros Messages: 259 Localisation: Ben ... Devant mon ordi bien sûr ! |
Le PJ ne participe pas au combat. Il ne fait que regarder le combat puisque j'ai instauré dans mon module un système de paris... Mais je suis incapable de mettre en pratique ce système...
Il y a deux gladiateurs : un bleu et un vert. Au début, j'avais imaginé créer deux zones identiques et envoyer le PJ dans l'une d'elles suivant son choix. Mais je n'ai pas trouver de moyen pour la somme d'argent... Si le NPC sur lequel a parié le joueur gagne, la somme est doublée, sinon tout est perdu. Je ne sais vraiment pas comment faire. Merci d'avance. L. _________________ Cogito ergo sum. |
Revenir en haut | |
Longbow Grand Sage du Conseil Messages: 638 Localisation: Orléans |
Hum, hum...
Voila un projet intéressant et bien décrit. Réfléchissons... 1. Créer deux factions... (vert et bleu). Hostile entre elles mais neutre avec toutes les autres. sinon attention au pugilat. 2. Créer au moins 2 ResRef de gladiateurs. Pour varier pourquoi pas 2 à 3 par factions... (armure récurrentes mais armes variées...) 3. Créer une arène avec 2 waypoints à chaque bout de la zone de combat. 4. Créer un dialogue avec le BookMaker (qui prend les paris). Je n'ai pas le temps e finaliser mais voici les 1e scripts... 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. 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. NWScript :
void main() { TakeGoldFromCreature(100, GetPCSpeaker(), FALSE); SetLocalInt(GetPCSpeaker(), "Po", 100); } NWScript :
void main() { TakeGoldFromCreature(10, GetPCSpeaker(), FALSE); SetLocalInt(GetPCSpeaker(), "Po", 10); } NWScript :
void main() { object oVert = CreateObject(OBJECT_TYPE_CREATURE, "vertglad", GetLocation(GetWaypointByTag("WP_VertGlad_01")), TRUE); object oBleu = CreateObject(OBJECT_TYPE_CREATURE, "bleuglad", GetLocation(GetWaypointByTag("WP_BleuGlad_01")), TRUE); AssignCommand (oVert, SpeakString("Ceux qui vont mourrir te salue !!")); AssignCommand (oBleu, SpeakString("Ceux qui vont mourrir te salue !!")); AssignCommand (oVert, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2)); AssignCommand (oBleu, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2)); } Il faudra ensuite travailler sur les OnDeath des 2 gladiateurs en fonction de la somme et du choix ... plus tard _________________ Rex illeteratus Quasi Asinus Coronatus Jean de Salisbury |
Revenir en haut | |
Lunshire Héros Messages: 259 Localisation: Ben ... Devant mon ordi bien sûr ! |
Merci bien Long, mais il y a une chose de plus que je voudrais savoir avant de tester ce que tu m'as dit...
Comment faire pour que le pari soit refusé si le joueur n'a pas assez d'argent ??? Cette question me taraude depuis quelques temps et je n'ai pas encore trouvé la solution. Merci encore. L. _________________ Cogito ergo sum. |
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
NWScript :
//en condition d'esxecution du parie de 10Po void main() { object oPC = GetPCSpeaker(); int amountOfGold = GetGold(oPC); if ( amountOfGold < 10 ) { SpeakString(""); } } NWScript :
//en condition d'esxecution du parie de 100Po void main() { object oPC = GetPCSpeaker(); int amountOfGold = GetGold(oPC); if ( amountOfGold < 100 ) { SpeakString(""); } } Mais comme l'a dit Longbow, ce n'est pas complet, il faut mettre quelque chose dans le OnDead de chaque Gladiateur... Alors g essayé, mais je ne garantie rien, je n'ai pas le talent de Longbow pour le script NWScript :
//OnDead du Gladiateur vert void main() { object oMap = GetArea(OBJECT_SELF); object oObjet = GetFirstObjectInArea(oMap); while (GetIsObjectValid(oObjet)) { if (GetIsPC(oObjet)) { if (GetLocalString(oObjet, "gladiateur") == "bleu") { if (GetLocalInt(oObjet, "Po") == 100) GiveGoldToCreature(oObjet, 200) if (GetLocalInt(oObjet, "Po") == 10) GiveGoldToCreature(oObjet, 20) } DelayCommand(0.3, DeleteLocalInt(oObjet, "gladiateur")) } oObjet = GetNextObjectInArea(oMap); } } NWScript :
//OnDead du Gladiateur bleu void main() { object oMap = GetArea(OBJECT_SELF); object oObjet = GetFirstObjectInArea(oMap); while (GetIsObjectValid(oObjet)) { if (GetIsPC(oObjet)) { if (GetLocalString(oObjet, "gladiateur") == "vert") { if (GetLocalInt(oObjet, "Po") == 100) GiveGoldToCreature(oObjet, 200) if (GetLocalInt(oObjet, "Po") == 10) GiveGoldToCreature(oObjet, 20) } DelayCommand(0.3, DeleteLocalInt(oObjet, "gladiateur")) } oObjet = GetNextObjectInArea(oMap); } } Bonne chance ^^ _________________ http://perso.wanadoo.fr/kikitor | Deviant Art | www.VistaEntraide.com | CCLLSELFV! | D-lire_K | Viendez rêver au Pays des fées... | Ne taquinez pas l'admin! |
Revenir en haut | |
Longbow Grand Sage du Conseil Messages: 638 Localisation: Orléans |
Hum, hum...
Que voila un travail d'équipe constructif... Un très léger correctif au OnDead de kik (prononcez "Kieuque")... un ou deux ';' qui manquaient et un destroy de l'autre gladiateur (pour nettoyer l'arène)... Attention au Tag de l'autre gladiateur NWScript :
//OnDead du Gladiateur bleu void main() { object oMap = GetArea(OBJECT_SELF); object oObjet = GetFirstObjectInArea(oMap); while (GetIsObjectValid(oObjet)) { if (GetIsPC(oObjet)) { if (GetLocalString(oObjet, "gladiateur") == "vert") { if (GetLocalInt(oObjet, "Po") == 100) GiveGoldToCreature(oObjet, 200); if (GetLocalInt(oObjet, "Po") == 10) GiveGoldToCreature(oObjet, 20); } DelayCommand(0.3, DeleteLocalInt(oObjet, "gladiateur")); } oObjet = GetNextObjectInArea(oMap); } DestroyObject(GetNearestObjectByTag("VertGlad"),2.0); } Idem pour le gladiateur vert NWScript :
//OnDead du Gladiateur vert void main() { object oMap = GetArea(OBJECT_SELF); object oObjet = GetFirstObjectInArea(oMap); while (GetIsObjectValid(oObjet)) { if (GetIsPC(oObjet)) { if (GetLocalString(oObjet, "gladiateur") == "bleu") { if (GetLocalInt(oObjet, "Po") == 100) GiveGoldToCreature(oObjet, 200); if (GetLocalInt(oObjet, "Po") == 10) GiveGoldToCreature(oObjet, 20); } DelayCommand(0.3, DeleteLocalInt(oObjet, "gladiateur")); } oObjet = GetNextObjectInArea(oMap); } DestroyObject(GetNearestObjectByTag("BleuGlad"),2.0); } ca a l'air de tourner correctement... N'hésite pas on est là pour ça !! _________________ Rex illeteratus Quasi Asinus Coronatus Jean de Salisbury |
Revenir en haut | |
Lunshire Héros Messages: 259 Localisation: Ben ... Devant mon ordi bien sûr ! |
Nickel vraiment !
Je vais encore abuser... J'ai fait devenir le PJ invisible pendant la cutscene, mais impossible de définir le temps que durera le combat. Quelle est donc le fonction qui annule cet effet ? _________________ Cogito ergo sum. |
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
Heu... Comment tu l'as fait devenir invisible?
En gros : C'est un visualeffect ou un effet de cutscene? Lequel? Si tu nous dit ce que tu as appliqué exactement au PJ pour le rendre invisible, suffira de mettre la destruction d'effet approprié (heu... je pense qu'il y aura une boucle à faire quand même...) dans le OnDead des gladiateurs... (bââh oui, c'est ce qui correspond à la fin du combat ^^) _________________ http://perso.wanadoo.fr/kikitor | Deviant Art | www.VistaEntraide.com | CCLLSELFV! | D-lire_K | Viendez rêver au Pays des fées... | Ne taquinez pas l'admin! |
Revenir en haut | |
Lunshire Héros Messages: 259 Localisation: Ben ... Devant mon ordi bien sûr ! |
J'savais bien qu'il fallait le mettre dans le OnDeath...
Sinon, j'ai utilisé un fragment de script que Longbow a donné à un camarade. Ca fait 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. Mais la fonction DestroyEffect n'existe pas... A la recherche de la fonction disparue ! (Bon ok, z'avez l'droit de me taper... ) [Edit]: Et si on mettait un NWScript :
EffectDisappearAppear ou NWScript :
EffectAppear sur le Pc ? Est-ce que ça ferait ce qu'on veut ?: _________________ Cogito ergo sum. Dernière édition par Lunshire le 27/04/2004 11:49:18; édité 1 fois
|
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
Bon, c'est donc un visual effect...
Donc en partant du principe que le VFX_DUR_CUTSCENE_INVISIBILITY répond bien à un EFFECT_TYPE_INVISIBILITY, (y'a bien des EFFECT_TYPE_CUTSCENEquelquechose, mais rien concernant l'invisibilité oO) je penche pour la solution de la boucle, du style : NWScript :
//OnDead du Gladiateur bleu void main() { object oMap = GetArea(OBJECT_SELF); object oObjet = GetFirstObjectInArea(oMap); while (GetIsObjectValid(oObjet)) { if (GetIsPC(oObjet)) { if (GetLocalString(oObjet, "gladiateur") == "vert") { if (GetLocalInt(oObjet, "Po") == 100) GiveGoldToCreature(oObjet, 200); if (GetLocalInt(oObjet, "Po") == 10) GiveGoldToCreature(oObjet, 20); effect eEff = GetFirstEffect(oObjet); while (GetIsEffectValid(eEff)) { if (GetEffectType(eEff)==EFFECT_TYPE_INVISIBILITY) { RemoveEffect(oObjet, eEff); } eEff=GetNextEffect(oObjet); } } DelayCommand(0.3, DeleteLocalInt(oObjet, "gladiateur")); } oObjet = GetNextObjectInArea(oMap); } DestroyObject(GetNearestObjectByTag("VertGlad"),2.0); } Idem pour le gladiateur vert NWScript :
//OnDead du Gladiateur vert void main() { object oMap = GetArea(OBJECT_SELF); object oObjet = GetFirstObjectInArea(oMap); while (GetIsObjectValid(oObjet)) { if (GetIsPC(oObjet)) { if (GetLocalString(oObjet, "gladiateur") == "bleu") { if (GetLocalInt(oObjet, "Po") == 100) GiveGoldToCreature(oObjet, 200); if (GetLocalInt(oObjet, "Po") == 10) GiveGoldToCreature(oObjet, 20); effect eEff = GetFirstEffect(oObjet); while (GetIsEffectValid(eEff)) { if (GetEffectType(eEff)==EFFECT_TYPE_INVISIBILITY) { RemoveEffect(oObjet, eEff); } eEff=GetNextEffect(oObjet); } } DelayCommand(0.3, DeleteLocalInt(oObjet, "gladiateur")); } oObjet = GetNextObjectInArea(oMap); } DestroyObject(GetNearestObjectByTag("BleuGlad"),2.0); } Dis nous si ça fonctionne ^^ PS : j'ai pas retenu l'idée du EffectDisappearAppear, car je ne crois pas qu'on puisse mettre un temps prédefinie entre l'apparition et la disparition oO _________________ http://perso.wanadoo.fr/kikitor | Deviant Art | www.VistaEntraide.com | CCLLSELFV! | D-lire_K | Viendez rêver au Pays des fées... | Ne taquinez pas l'admin! |
Revenir en haut | |
Lunshire Héros Messages: 259 Localisation: Ben ... Devant mon ordi bien sûr ! |
Nickel ! Merci pour tous les gars !
Encore une question... (Et oui, quand y'en a plus y'en a encore... ). Lors de la Cutscene, quand le curseur se positionne sur le bord de l'écran, la caméra fait comme une sorte de tremblement fort disgracieuse et ça gâche tous le sensationnel de la cinématique ! Et si ces "convulsions" ne se produisent pas, une fois revenu devant le bassin à la fin du cut, il est impossible de faire pivoter la caméra... Comment ça se fait ? _________________ Cogito ergo sum. |
Revenir en haut | |
Longbow Grand Sage du Conseil Messages: 638 Localisation: Orléans |
Hum, hum...
Est-ce que tu utilises le système de cutscene de Gestalt ?? Si ce n'est pas le cas, je sèche.... _________________ Rex illeteratus Quasi Asinus Coronatus Jean de Salisbury |
Revenir en haut | |
Lunshire Héros Messages: 259 Localisation: Ben ... Devant mon ordi bien sûr ! |
Longbow a écrit : Est-ce que tu utilises le système de cutscene de Gestalt ?? Si ce n'est pas le cas, je sèche.... Rassure-toi, tu n'es pas encore sec, du moins je l'espère parce que tu m'es très utile !
J'utilise bien Gestalt. Je l'ai utilisé d'ailleurs sur ton conseil et j'en suis très heureux ! C'est trop mortel ! Voila le script si tu veux... NWScript :
#include "in_g_cameramove" void main() { object oPC = GetFirstPC(); object oGlad1 = GetObjectByTag("player1"); object oGlad2 = GetObjectByTag("player2"); object oWPStart = GetWaypointByTag("wp_start"); object oWPEnd = GetWaypointByTag("wp_end"); object oWPStart1 = GetWaypointByTag("wp_start1"); object oWPEnd1 = GetWaypointByTag("wp_end1"); DelayCommand(0.5, AssignCommand(oGlad1, SetCutsceneMode(oPC, TRUE))); DelayCommand(1.0, AssignCommand(oGlad1,ActionJumpToObject(oWPStart))); DelayCommand(1.5, AssignCommand(oGlad1,ActionMoveToObject(oWPEnd))); DelayCommand(1.5, DestroyObject(oWPStart)); DelayCommand(2.0, DestroyObject(oWPEnd)); GestaltCameraTrack (1.0, oGlad1, 15.0, 50.0, 15.0, 50.0, 7.5, 20.0, oPC, 0); DelayCommand(9.5, AssignCommand(oGlad2,ActionJumpToObject(oWPStart1))); DelayCommand(10.0, AssignCommand(oGlad2,ActionMoveToObject(oWPEnd1))); DelayCommand(10.0, DestroyObject(oWPStart1)); DelayCommand(10.5, DestroyObject(oWPEnd1)); GestaltCameraTrack(10.0, oGlad2, 15.0, 50.0, 15.0, 50.0, 7.5, 20.0, oPC, 0); DelayCommand(18.0, AssignCommand(oGlad1, ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL))); DelayCommand(18.0, AssignCommand(oGlad2, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY1))); DelayCommand(20.0, AssignCommand(oGlad1, ActionAttack(oGlad2))); DelayCommand(20.0, GestaltCameraTrack(10.0, oGlad2, 15.0, 50.0, 15.0, 50.0, 80.0, 20.0, oPC, 0)); } Et puisqu'on en parle, tu connais le script qui permet à la caméra de tourner autour d'un personnage (en fait ici ça serait autour de deux gladiateurs pendant le combat )... J'ai étudié le module de la caméra mais je n'ai rien trouvé... Est-ce que la caméra fixe donne quelque chose de bien ? Je pense pas... _________________ Cogito ergo sum. |
Revenir en haut | |
Longbow Grand Sage du Conseil Messages: 638 Localisation: Orléans |
Hum, hum...
En voyant ton script, un élément a attiré mon attention... Tu cherches à détruire des waypoints... mais ce ne sont pas des objets... une fois posés, ils ne peuvent être enlevé !! Il me semble que la caméra ne peut avoir comme référence que le joueur qui reste le point central... La caméra puet être dirigée dans d'autres directions mais toujours avec le PJ comme base.. Pour le reste, il faudrait que j'implante to script... _________________ Rex illeteratus Quasi Asinus Coronatus Jean de Salisbury |
Revenir en haut | |
Lunshire Héros Messages: 259 Localisation: Ben ... Devant mon ordi bien sûr ! |
Longbow a écrit : Tu cherches à détruire des waypoints... mais ce ne sont pas des objets... une fois posés, ils ne peuvent être enlevé !! Merci pour cette information.
Longbow a écrit : Pour le reste, il faudrait que j'implante to script... Ce n'est pas la peine, ne te fatigue pas, ce n'est qu'un problème minime. Merci pour tout à vous deux. _________________ Cogito ergo sum. |
Revenir en haut | |
Joubinator Ecuyer Messages: 42 Localisation: Yvelines |
Petite question supplémentaire à ce beau travail :
Si je veux que les 2 pnj qui s'affrontent soient de la meme faction Est ce possible? Comment faire pour les obliger à le faire? Quelles sont les lignes de scripts à rajouter ? J'ai essayer de mon côté à faire cela, mais il veulent vraiment pas se battre les 2 pnjs _________________ M'enfous si les pjs tuent mes monstres,.... j'en ai plein (paroles d'un DM d'expérience ) |
Revenir en haut | |
Lunshire Héros Messages: 259 Localisation: Ben ... Devant mon ordi bien sûr ! |
Joubinator a écrit : Si je veux que les 2 pnj qui s'affrontent soient de la meme faction Si les 2 pnj sont de la même faction, ils ne peuvent pas s'attaquer puisqu'ils appartiennent au même "côté". Le seul moyen est de créer deux factions différentes. Ces deux factions doivent être neutres pour s'attaquer avec un ActionAttack sinon ça ne marche pas.
Après, tu peux mettre un pnj défenseur et un autre populace en changeant ensuite leur rapport en neutre... Il me semble bien que c'est possible. _________________ Cogito ergo sum. |
Revenir en haut | |
Longbow Grand Sage du Conseil Messages: 638 Localisation: Orléans |
Hum, hum...
Et pourquoi pas mettre "hostile" les mêmes membres d'une faction ?? Outils / éditeur de faction / Onglet Avancées / mettre 0 à l'intersection entre vert et vert par exemple... J'ai testé, cela fonctionne et ne nécessite aucun script supplémentaire... _________________ Rex illeteratus Quasi Asinus Coronatus Jean de Salisbury |
Revenir en haut | |
Lunshire Héros Messages: 259 Localisation: Ben ... Devant mon ordi bien sûr ! |
Longbow a écrit : Et pourquoi pas mettre "hostile" les mêmes membres d'une faction ??
Alors là bravo ! Je m'excuse auprès de Joubinator pour ce fauw renseignement... . Et un autre Bravo à ajouter à la liste de ceux de Longbow !Outils / éditeur de faction / Onglet Avancées / mettre 0 à l'intersection entre vert et vert par exemple... _________________ Cogito ergo sum. |
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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