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 01/11/2024 21:37:43
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 |
Enki Légende vivante Messages: 432 |
[Message édité avec nouveaux scripts ]
Bonjour ! Je me suis amusé à faire une petie animation pour le module persistant Star Wars de Drenark. Je ne résiste pas au plaisir de vous en faire profiter : Que seraient nos modules sans les tavernes ? Je vous propose donc d'ouvrir une section dédiée aux scripts de tavernes, Pubs, Hotels, Bars, etc... Et je commence en proposant une scène toute simple pour animer ces lieux bigarrés : - Quatre PNJs entrent dans un bar, s'installent à une table et jouent au "Starpoker". L'un d'eux n'arrête pas de gagner et les autres se rendent compte qu'il triche. Ils sortent leurs armes, le tuent et rentrent chez eux. [Message édité : ] Bon, je t'envoies les nouveux scripts pour que la scène fonctionne au mieux. Concernant ton bug Les PNJs doivent pouvoir s'asseoir sans problème, vérifie que les tags des PNJs sont corrects et que les chaises ne sont pas trop près de la table. Pour réaliser cette scène vous avez besoin : - d'une table ( ) - un waypoint à l'entrée du bar tag "way01" - de 4 chaises utilisables dont les tags sont : - "chaise_joueur" - "chaise_joueur001" - "chaise_joueur002" - "chaise_joueur003" Sur chaque chaise, il faut mettre ces scripts : sur le onUsed : Code: NWScript :
void main() { object oChair = OBJECT_SELF; if (!GetIsPC(GetLastUsedBy())) { if(GetIsObjectValid(GetSittingCreature(oChair))) { AssignCommand(GetSittingCreature(oChair),ClearAllActions()); AssignCommand(GetSittingCreature(oChair),PlayAnimation(ANIMATION_LOOPING_DEAD_BACK,1.0,1.5)); AssignCommand(GetLastUsedBy(),PlayAnimation(ANIMATION_FIREFORGET_TAUNT)); AssignCommand(GetLastUsedBy(),SpeakString("")); AssignCommand(GetLastUsedBy(), ActionSit(oChair)); } } if (!GetIsPC(GetLastUsedBy())) { if(!GetIsObjectValid(GetSittingCreature(oChair))) { AssignCommand(GetLastUsedBy(), ActionSit(oChair)); } } if (GetIsPC(GetLastUsedBy())) { if(!GetIsObjectValid(GetSittingCreature(oChair))) { AssignCommand(GetLastUsedBy(), ActionSit(oChair)); } } } sur le onHeartBeat : Code: NWScript :
void main() { int iAssis=GetLocalInt(GetModule(),"assis"); object oNPC=GetSittingCreature(OBJECT_SELF); if(GetIsObjectValid(GetSittingCreature(OBJECT_SELF))) { if (!GetIsPC(oNPC)) { if (GetLocalInt(OBJECT_SELF,"NW_DO_ONCE") != 0) return; iAssis++; SetLocalInt(GetModule(),"assis",iAssis); SetLocalInt(OBJECT_SELF,"NW_DO_ONCE",1); } } } Il faut également quatre PNJs, dans la palette mais pas dans l'area. Le tag ET le ResRef de ces PNJs doivent être : -"joueur" -"joueur001" -"joueur002" -"joueur003" La faction de ces PNJs importe peu, Populace va bien mais si vous avez créé une faction neutre de contrebandiers, cela ira parfaitement. le PNJ de Tag "joueur" est le tricheur. il doit avoir ces scripts : sur le onConversation : Code: NWScript :
#include "nw_i0_generic" void main() { if (GetIsPC(GetLastSpeaker())) SpeakString(""); // empeche le PNJ de se lever si un PJ lui parle // Send the user-defined event if appropriate if(GetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT)) { SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_DIALOGUE)); } } sur le onDeath : Code: void Partir (object oNPC) { object oWaypoint=GetWaypointByTag("way01"); AssignCommand(oNPC, ActionMoveToObject(oWaypoint)); DestroyObject(oNPC,10.0); // le temps qu'il faut pour aller de la table a la porte. } void main() { SetLocalInt(GetModule(),"assis",4); object oJoueur001= GetObjectByTag("joueur001"); object oJoueur002= GetObjectByTag("joueur002"); object oJoueur003= GetObjectByTag("joueur003"); Partir(oJoueur001); Partir(oJoueur002); Partir(oJoueur003); } sur le OnSpawn : Code: NWScript :
#include "x0_i0_anims" // #include "x0_i0_walkway" - in x0_i0_anims #include "x0_i0_treasure" #include "x2_inc_switches" void main() { SetLocalInt(OBJECT_SELF,"iroll",1); // * Fire User Defined Event 1001 in the OnHeartbeat // * SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); // * Fire User Defined Event 1002 // * // SetSpawnInCondition(NW_FLAG_PE RCIEVE_EVENT); // * Fire User Defined Event 1005 // * SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); // * Fire User Defined Event 1006 // * // SetSpawnInCondition(NW_FLAG_DA MAGED_EVENT); // * Fire User Defined Event 1008 // * // SetSpawnInCondition(NW_FLAG_DI STURBED_EVENT); // * Fire User Defined Event 1003 // * SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); // * Fire User Defined Event 1004 // * SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); // ***** DEFAULT GENERIC BEHAVIOR (DO NOT TOUCH) ***** // // * Goes through and sets up which shouts the NPC will listen to. // * SetListeningPatterns(); SetListenPattern(OBJECT_SELF, "", 500); SetListenPattern(OBJECT_SELF, "", 501); SetListenPattern(OBJECT_SELF, "", 502); SetListenPattern(OBJECT_SELF, "Je mise 500 ! ", 503); SetListenPattern(OBJECT_SELF, "Je mise 150 ! ", 504); SetListenPattern(OBJECT_SELF, "Combien de cartes ? ", 505); SetListenPattern(OBJECT_SELF, "T'en veux combien ? ", 506); SetListenPattern(OBJECT_SELF, "Il bluff ! ", 507); SetListenPattern(OBJECT_SELF, "Une paire de Jedi ! ", 508); SetListenPattern(OBJECT_SELF, "", 509); SetListenPattern(OBJECT_SELF, "Un full de 7 par les Chanceliers ! ", 510); SetListenPattern(OBJECT_SELF, "", 511); WalkWayPoints(); //* Create a small amount of treasure on the creature if ((GetLocalInt(GetModule(), "X2_L_NOTREASURE") == FALSE) && (GetLocalInt(OBJECT_SELF, "X2_L_NOTREASURE") == FALSE) ) { CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); } // ***** ADD ANY SPECIAL ON-SPAWN CODE HERE ***** // // * If Incorporeal, apply changes if (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_IS_INCORPOREAL) == TRUE) { effect eConceal = EffectConcealment(50, MISS_CHANCE_TYPE_NORMAL); eConceal = ExtraordinaryEffect(eConceal); effect eGhost = EffectCutsceneGhost(); eGhost = ExtraordinaryEffect(eGhost); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eConceal, OBJECT_SELF); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, OBJECT_SELF); } } sur le OnUserDefined : Code: NWScript :
void Partir (object oNPC) { object oWaypoint=GetWaypointByTag("way01"); AssignCommand(oNPC, ActionMoveToObject(oWaypoint)); DestroyObject(oNPC,10.0); // le temps qu'il faut pour aller de la table a la porte. } void Vajouer(object oNPC) { object oChaise=GetObjectByTag("chaise_"+GetTag(OBJECT_SELF)); ActionForceMoveToObject(oChaise); ActionInteractObject(oChaise); } void main() { int nUser = GetUserDefinedEventNumber(); int iRollThree = d3(1); int iRollTen = GetLocalInt(OBJECT_SELF,"iroll"); if(nUser == 1004) { object oTricheur = GetLastSpeaker(); } else if(nUser == 1001) //HEARTBEAT { if (GetLocalInt(GetModule(),"assis")==10) { if (!GetIsInCombat(OBJECT_SELF)) { ClearAllActions(); Partir(OBJECT_SELF); } } if (GetLocalInt(GetModule(),"assis")==4) { if (!GetIsInCombat()) { switch(iRollTen) { case 1: iRollTen ++; SetLocalInt(OBJECT_SELF,"iroll",iRollTen); SpeakString(""); break; case 2: SpeakString("Combien de cartes ? "); iRollTen ++; SetLocalInt(OBJECT_SELF,"iroll",iRollTen); break; case 3: iRollTen++; SetLocalInt(OBJECT_SELF,"iroll",iRollTen); SpeakString("Je mise 500 ! "); // SpeakString("Une paire de Rois ! "); break; case 4: SpeakString("Une paire de Jedi ! "); //SpeakString("Je mise 500 ! "); iRollTen++; SetLocalInt(OBJECT_SELF,"iroll",iRollTen); break; case 5: SpeakString(""); // SpeakString("Combien de cartes ? "); iRollTen++; SetLocalInt(OBJECT_SELF,"iroll",iRollTen); break; case 6: iRollTen++; SetLocalInt(OBJECT_SELF,"iroll",iRollTen); SpeakString("T'en veux combien ? "); break; case 7: SpeakString("Il bluff ! "); iRollTen++; SetLocalInt(OBJECT_SELF,"iroll",iRollTen); break; case 8: if (GetLocalInt(OBJECT_SELF,"tricher")==1) // SpeakString("Un brelan de Reines. "); { SpeakString("Un full de 7 par les Chanceliers ! "); iRollTen ++; SetLocalInt(OBJECT_SELF,"iroll",iRollTen); } else if (GetLocalInt(OBJECT_SELF,"tricher")==0) { // SpeakString("Une paire de Rois ! "); SpeakString(""); iRollTen++; SetLocalInt(OBJECT_SELF,"iroll",iRollTen); } break; case 9: if (GetLocalInt(OBJECT_SELF,"tricher")==1) // SpeakString("Un brelan de Reines. "); { SpeakString(""); iRollTen ++; SetLocalInt(OBJECT_SELF,"iroll",iRollTen); } else if (GetLocalInt(OBJECT_SELF,"tricher")==0) { SetLocalInt(OBJECT_SELF,"iroll",1); SpeakString("Je ramasse tout. "); SetLocalInt(OBJECT_SELF,"tricher",1); } break; case 10: SpeakString("Combien de cartes ? "); iRollTen ++; SetLocalInt(OBJECT_SELF,"iroll",iRollTen); break; case 11: iRollTen ++; SetLocalInt(OBJECT_SELF,"iroll",iRollTen); SpeakString("Je mise 500 ! "); break; case 12: SpeakString(""); PlayAnimation(ANIMATION_FIREFORGET_VICTORY1); iRollTen ++; SetLocalInt(OBJECT_SELF,"iroll",iRollTen); break; case 13: SpeakString(""); PlayAnimation(ANIMATION_LOOPING_TALK_PLEADING,1.0,1.0); // DelayCommand(1.0,ChangeToStand ardFaction(OBJECT_SELF, STANDARD_FACTION_HOSTILE)); // SetLocalInt(GetModule()," assis",5); SetLocalInt(OBJECT_SELF,"iroll",0); break; } } } else if (!GetIsInCombat(OBJECT_SELF) && GetCurrentAction(OBJECT_SELF)!=ACTION_SIT) { Vajouer( OBJECT_SELF); } } else if(nUser == 1005) // ATTACKED { object oPC=GetLastHostileActor(); object oJoueur= GetObjectByTag("joueur"); object oJoueur001= GetObjectByTag("joueur001"); object oJoueur002= GetObjectByTag("joueur002"); object oJoueur003= GetObjectByTag("joueur003"); if (GetIsPC(oPC)) { AssignCommand(oJoueur,ClearAllActions()); AssignCommand(oJoueur,ActionAttack(oPC)); AssignCommand(oJoueur002,ClearAllActions()); AssignCommand(oJoueur002,ActionAttack(oPC)); AssignCommand(oJoueur003,ClearAllActions()); AssignCommand(oJoueur003,ActionAttack(oPC)); AssignCommand(oJoueur001,ClearAllActions()); AssignCommand(oJoueur001,ActionAttack(oPC)); /* if (GetIsDead(oPC)) { ClearAllActions(); Partir(OBJECT_SELF); } */ } } else if(nUser == 1003) // END OF COMBAT { object oPC=GetLastHostileActor(); if (GetIsDead(oPC)==TRUE) { SetLocalInt(GetModule(),"assis",10); } } } Les autres PNJs doivent avoir les mêmes scripts sur le : - OnConversation - OnSpawn Pour le reste les scripts par défaut sauf pour le - OnUserDefined : Code: NWScript :
void Partir (object oNPC) { object oWaypoint=GetWaypointByTag("way01"); AssignCommand(oNPC, ActionMoveToObject(oWaypoint)); DestroyObject(oNPC,10.0); // le temps qu'il faut pour aller de la table a la porte. } void Vajouer(object oNPC) { object oChaise=GetObjectByTag("chaise_"+GetTag(OBJECT_SELF)); ActionForceMoveToObject(oChaise); ActionInteractObject(oChaise); } void main() { int nUser = GetUserDefinedEventNumber(); int iRollThree = d3(1); if(nUser == 1004) { object oTricheur = GetLastSpeaker(); if (!GetIsInCombat(OBJECT_SELF)) { int nMatch = GetListenPatternNumber(); switch (nMatch) { case 500: DelayCommand(1.5,SpeakString("")); break; case 501: switch(iRollThree) { case 1: DelayCommand(1.5,SpeakString("Suivi ! ")); break; case 2: DelayCommand(2.5,SpeakString("J'te suis. ")); break; case 3: DelayCommand(2.2,SpeakString("Sans Moi. ")); break; } break; case 502: switch(iRollThree) { case 1: DelayCommand(0.5,SpeakString("Suivi ! ")); break; case 2: DelayCommand(1.5,SpeakString("J'te suis. ")); break; case 3: DelayCommand(1.0,SpeakString("Sans Moi. ")); break; } break; case 503: // "Je mise 500 ! ", 503); switch(iRollThree) { case 1: DelayCommand(1.0,SpeakString("")); break; case 2: DelayCommand(1.0,SpeakString("J'te vois. ")); break; case 3: DelayCommand(1.0,SpeakString("Sans Moi. ")); break; } break; case 504: // "Je mise 150 ! ", 504); switch(iRollThree) { case 1: DelayCommand(1.0,SpeakString("je veux voir ! ")); break; case 2: DelayCommand(1.0,SpeakString("Je te vois. ")); break; case 3: DelayCommand(1.0,SpeakString("150 pour te voir. ")); break; } break; case 505: //"Combien de cartes ? ", 505); switch(iRollThree) { case 1: DelayCommand(1.0,SpeakString("Deux ! ")); break; case 2: DelayCommand(1.0,SpeakString("Quatres. ")); break; case 3: DelayCommand(1.0,SpeakString("une seule. ")); break; } break; case 506: // "T'en veux combien ? ", 506); switch(iRollThree) { case 1: DelayCommand(1.0, SpeakString("Servi ! ")); break; case 2: DelayCommand(1.5,SpeakString("Trois. ")); break; case 3: DelayCommand(0.5,SpeakString("Deux. ")); break; } break; case 507: // "Il bluff ! ", 507); switch(iRollThree) { case 1: DelayCommand(1.0,SpeakString("")); break; case 2: DelayCommand(1.5,SpeakString("J'voudrai bien l'savoir. ")); break; case 3: DelayCommand(0.5,SpeakString("On verra ... ")); break; } break; case 508: // "Une paire de Rois ! ", 508); switch(iRollThree) { case 1: DelayCommand(0.5,SpeakString("Pas mieux. ")); break; case 2: DelayCommand(1.0,SpeakString("Une paire de Hutts. ")); break; case 3: DelayCommand(1.5,SpeakString("C'est bon. ")); break; } break; case 509: // "Un brelan de Reines. ", 509); switch(iRollThree) { case 1: DelayCommand(1.0,SpeakString("")); break; case 2: DelayCommand(1.5,SpeakString("")); break; case 3: DelayCommand(1.0,SpeakString("Pas mieux. ")); break; } break; case 510: //"Un full de 7 par les Valets ! ", 510); DelayCommand(1.0,SpeakString("Pas mieux. ")); break; case 511: switch(iRollThree) { case 1: DelayCommand(1.0,PlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL)); DelayCommand(1.0,SpeakString("Mais c'est impossible, tricheur !!! ")); DelayCommand(10.0,ActionAttack(oTricheur)); break; case 2: DelayCommand(1.5,PlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL)); DelayCommand(1.5,SpeakString("")); DelayCommand(10.0,ActionAttack(oTricheur)); break; case 3: DelayCommand(0.5,PlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL)); DelayCommand(0.5,SpeakString("")); DelayCommand(10.0,ActionAttack(oTricheur)); break; } break; }; } } else if(nUser == 1001) //HEARTBEAT { if (GetLocalInt(GetModule(),"assis")==10) { if (!GetIsInCombat(OBJECT_SELF)) { ClearAllActions(); Partir(OBJECT_SELF); } } if (GetLocalInt(GetModule(),"assis")==4) return; if (!GetIsInCombat(OBJECT_SELF) && GetCurrentAction(OBJECT_SELF)!=ACTION_SIT) { Vajouer( OBJECT_SELF); } } else if(nUser == 1005) // ATTACKED { object oPC=GetLastHostileActor(); if (GetIsPC(oPC)) { object oJoueur= GetObjectByTag("joueur"); object oJoueur001= GetObjectByTag("joueur001"); object oJoueur002= GetObjectByTag("joueur002"); object oJoueur003= GetObjectByTag("joueur003"); AssignCommand(oJoueur,ClearAllActions()); AssignCommand(oJoueur,ActionAttack(oPC)); AssignCommand(oJoueur002,ClearAllActions()); AssignCommand(oJoueur002,ActionAttack(oPC)); AssignCommand(oJoueur003,ClearAllActions()); AssignCommand(oJoueur003,ActionAttack(oPC)); AssignCommand(oJoueur001,ClearAllActions()); AssignCommand(oJoueur001,ActionAttack(oPC)); /* if (GetIsDead(oPC)) { ClearAllActions(); Partir(OBJECT_SELF); } */ } } else if(nUser == 1003) // END OF COMBAT { object oPC=GetLastHostileActor(); if (GetIsDead(oPC)==TRUE) { SetLocalInt(GetModule(),"assis",10); } } } La scène est déclenchée par un trigger, dans le OnEnter duquel il faut mettre : Code: NWScript :
void main() { object oPC=GetEnteringObject(); object oWaypoint=GetWaypointByTag("way01"); location lLoc=GetLocation(oWaypoint); if (GetIsPC(oPC)) { if (GetLocalInt(OBJECT_SELF,"NW_DO_ONCE") != 0) return; object oJoueur= CreateObject(OBJECT_TYPE_CREATURE,"joueur",lLoc); object oJoueur001= CreateObject(OBJECT_TYPE_CREATURE,"joueur001",lLoc); object oJoueur002= CreateObject(OBJECT_TYPE_CREATURE,"joueur002",lLoc,0); object oJoueur003= CreateObject(OBJECT_TYPE_CREATURE,"joueur003",lLoc,0); SetLocalInt(OBJECT_SELF,"NW_DO_ONCE",1); } } Et voilà ! Cette scène ne se déclenche qu'une seule fois, mais si vous voulez, on peut s'arranger pour quelle ait lieu par exemple une fois tous les trois jours. J'espère que cela vous plaira, on peut en faire plein d'autres dans le genre. A très bientôt ! Dernière édition par Enki le 18/04/2006 14:04:05; édité 2 fois
|
Revenir en haut | |
L'Erudit Seigneur Messages: 167 |
Super ! Par contre, pour les Pattern, n'aurais tu pas pu les mettres dans un fichier à part, pour après l'inclure?
|
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Tu veux dire pour ces 12 patterns qui sont sur le OnSpawn ?
NWScript :
SetListenPattern(OBJECT_SELF, "", 500); SetListenPattern(OBJECT_SELF, "", 501); SetListenPattern(OBJECT_SELF, "", 502); SetListenPattern(OBJECT_SELF, "Je mise 500 ! ", 503); SetListenPattern(OBJECT_SELF, "Je mise 150 ! ", 504); SetListenPattern(OBJECT_SELF, "Combien de cartes ? ", 505); SetListenPattern(OBJECT_SELF, "T'en veux combien ? ", 506); SetListenPattern(OBJECT_SELF, "Il bluff ! ", 507); SetListenPattern(OBJECT_SELF, "Une paire de Jedi ! ", 508); SetListenPattern(OBJECT_SELF, "", 509); SetListenPattern(OBJECT_SELF, "Un full de 7 par les Chanceliers ! ", 510); SetListenPattern(OBJECT_SELF, "", 511); C'est peut-être possible, mais je n'en voit pas l'intérêt, en fait. A moins de faire un include avec tous les patterns du module et de rappeler ceux dont on a besoin. Qu'est ce que tu voulais dire par là ? |
Revenir en haut | |
L'Erudit Seigneur Messages: 167 |
Bien en fait, comme je n'aime pas toucher aux Evennements hors du OnUserDefined, j'essaie de tout mettre dedans !
En fait, je crois qu'on ne peut pas les mettre dans une eventuelle "librairie", qu'on pourrait inclure ensuite, parceque ce sont des fonctions, et on a donc besoin du void main(), en entete. Comme tu as pu le voir j'ai d'un côté un script (fichier) qui ne contient que des strings, et de l'autre un script qui va se charger de faire tourner la machine en utilisant les ressources du 1er (include). Après, tu as sûrement raison quand tu dis que ca n'apport rien, néanmoins c'est bien plus propre et lisible, et on utilise que le OnUserDefined (enfin, je crois ^^). |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Alors effectivement, tu as raison, c'est ce que je voulais dire par mettre tous les patterns dans un include, Je voulais parler des string.
Si tu appelles tes string dans ton include par exemple 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. Citation : Bien en fait, comme je n'aime pas toucher aux Evennements hors du OnUserDefined, j'essaie de tout mettre dedans ! Le problème, c'est qu'il n'y a pas d'événement OnSpawn en UserDefined.
Par contre, si tu ne veux pas toucher aux scripts de base, (c'est un choix contestable, mais pourquoi pas), tu n'est pas obligé de mettre les : 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. dans le OnSpawn, tu peux les mettre sur un trigger ou sur le onEnter de la zone, voire du Module, En incluant les tags des PNJs qui doivent écouter ou leur type, leur race etc ... Citation : néanmoins c'est bien plus propre et lisible Tu as peut être raison, car pour les Patterns, il faut être très vigilant : ils sont sensibles à la casse, et aux espaces.
Cependant, dans une conversation longue avec de multiple PNJs, c'est trés difficile de se rappeler à quoi correspond la string sPattern28 par exemple. Alors qu'avec un bon vieux et sale "copier-coller" on sait de suite à quel phrase le PNJ doit répondre et ainsi on évite les incohérences. Enfin, merci pour tes commentaires, peu de gens ont vue ce Post, ce qui est dommage à mon avis, car tous le monde doit avoir des tavernes dans son module et des scènes de ce genres mettant "de l'ambiance". J'espère qu'ils vont se manifester ! A bientôt ! |
Revenir en haut | |
L'Erudit Seigneur Messages: 167 |
Coucou ! Si AOL le veut bien, je vais tenter de répondre !
Alors pour le SetListenPattern(), doit on forcément passer par le OnSpawn pour les exécuter? Ne peut on pas, par exemple, les faire se déclencher après une Perception du PJ? A cemoment là, il serait tout a fait possible de les inclure dans son script de OnUserDefined. Pour ce qui est du post en lui même, je n'aime pas en voir sans réponses ! Mais parfois je ne sais vraiment pas quoi répoondre, et je dois dire que j'ai parfois la flemme de lire les longs scipts. Néanmoins l'idée des Pattern est très bonne, et je dirais qu'on pourrait encore l'améliorer en faisant des Pattern de Pattern de, etc... Là, on aurait vraiment des conversation multiples et intenses entre PNJ, pourvu qu'on ait l'inspiration créatrice pour inventer de nombreuses phrases ! |
Revenir en haut | |
Vinc0013 Chevalier Messages: 71 |
Euh.. c koi le "ResRef"? le prénom ou koi?
|
Revenir en haut | |
PsyCalimero Ecuyer Messages: 44 |
Le resref c'est un peu comme le tag, mais cest pas le tag
Tu peux le trouver dans les propriétés de l'objet Et il est pas modifiable (si oui ca minteresse !! marre de l'importation qui marche pas sans remplacer un resref existant !) |
Revenir en haut | |
Vinc0013 Chevalier Messages: 71 |
Sur mon perso g pas OnUsed! Pk?
|
Revenir en haut | |
Noon Héros Messages: 272 Localisation: Entre Vannes et les RO |
Parce que ton perso ne peux pas utiliser ton perso .
Le onUsed sert pour les objets et placeables. _________________ Beshaba me protège, Tymora guide mes tirs. The Cake is a lie ! Mes modules NwN2:De Vieilles Rencontres! et De Vieilles Rencontres2 Double Avenir sur le Nwvault |
Revenir en haut | |
Vinc0013 Chevalier Messages: 71 |
Merde! Je regardais le script de la chaise et je pensais que c'était celui du PNJ!
|
Revenir en haut | |
Vinc0013 Chevalier Messages: 71 |
Mais... un trigger? c un waypoint?
|
Revenir en haut | |
gussometre Ecuyer Messages: 56 Localisation: Petit asteroïde dans le finistére sud |
non un trigger c'est par exemple un piége ou une zone de transmision.
_________________ N'oublions pas le proverbe:quand on a faim il faut manger! |
Revenir en haut | |
L'Erudit Seigneur Messages: 167 |
C'est un déclencheur .
|
Revenir en haut | |
Vinc0013 Chevalier Messages: 71 |
Ok merci!! (dsl j'ai la flemme d'écrire merci )
|
Revenir en haut | |
Aladar Chevalier Messages: 96 Localisation: Tours |
Citation : Le resref c'est un peu comme le tag, mais cest pas le tag
Pour changer le resref d'un truc, il faut "créer une copie" de ce dit-truc.
Tu peux le trouver dans les propriétés de l'objet Et il est pas modifiable (si oui ca minteresse !! marre de l'importation qui marche pas sans remplacer un resref existant !) Une fois les propriétés de ce truc ouverte, dans l'onglet "avancés", la case resref est editable (par contre une fois cliqué sur OK elle se grise à nouveau). |
Revenir en haut | |
PsyCalimero Ecuyer Messages: 44 |
Et voui merci beaucoup, en fouinant un peut sur le net je venais de trouver la solution a ce probleme
|
Revenir en haut | |
Mans-maniac Novice Messages: 15 |
je viens d essayer cette anime chez moi ca marche po j ai bien les 4 joueurs qui apparaissent quand je rentre sur le declencheur mais apres rien il reste immobile pres de la porte quand je vais leur parler j ai degage on joue au star poker et c est tous ?
mon pj ne peu s assoir sur les chaises modifier pour les joueurs ? c est normale ? |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Salut !
Oui, c'est normal que le joueur ne puisse pas s'asseoir, car ceci est la première mouture pour cette scène. Puisque cette petite animation t'intéresse, je te filerai demain (ou cette nuit ^^ )la version "améliorée" où le joueur se fait éjecter de la chaise. Ce soir je n'aurai pas le temps. Merci d'essayer cette anim, que je trouve personnellement très marrante ! A bientôt ! |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Bon, j'ai édité mon premier message avec de nouveaux scripts.
|
Revenir en haut | |
gulin cul'sec Grand Chevalier Messages: 121 Localisation: mon pieu |
Bon la il va falloir m'expliquer, euh j'ai bien tout fais, mon trigger est devant le bar le joueur demande un ver et la 4 personne arrive et s'assoient et la! seul le tricheur parle, les autre ne parle pas et au final le tricheur ce leve et:
KEDAL!!!! Franchement je suis trop frustrait moi qui aurait adorait voir sa mais la j'ai du fair un flope ou autre mais sa ma dessu pourriez ous m'aidez? _________________ purer j'ai une de ses envies de pionce zzzzzzzZZZZZZzzzzzZZZZZZzz |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Oui, pas de problème !
si les autres joueur ne parlent pas, c'est que les scripts on spawn et on user defined ne sont pas les bons regarde de ce coté là. Si ce n'est pas cela, je peux t'envoyer une démo par mail, par exemple. Tu pourras comparer alors. A bientot ! |
Revenir en haut | |
gulin cul'sec Grand Chevalier Messages: 121 Localisation: mon pieu |
Bon et bien enki j'avance! les quatre personne parle mais la fin est assez bof, j'ai cru lir que le tricheur serait tuée à la fin une fois celui-ci decouvert mais la et bien non, les joueur parle bien mais a la fin il se levent tous et puis plus rien saurait tu comment resoudre mon probleme?
Sinon je voudrais savoir si quelqu'un connaitrer bien le poker ou autre jeu qui se joue avec de l'argent enfin comme le poker ou le blac-jack, enfin une chose assez realiste et que l'on jouer lors du moyen-age. Sinon je sort un peu du sujet, voila je m'adresse a enki quand je dit sa mais est ce que ton mod sera en solo ou mult et pourra tu m'en dire plus sur celui ci ? j'ai hate d'y jetez un oeil. Merci d'avance pour tout le monde et bonne vie (lol je sais pas quoi dire d'autre que sa mise a par de bonne vac mais je l'avais deja dis dans mon post d'avant ) _________________ purer j'ai une de ses envies de pionce zzzzzzzZZZZZZzzzzzZZZZZZzz |
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