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







La date/heure actuelle est 01/05/2025 00:29:19
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 |
xelone Acolyte Messages: 39 |
Voila mon problème (qui amène 3 questions) : j'aimerai que dans mon module, les joueurs arrivent dans une zone pour choisir leur camp donc question
1. est-il possible de rediriger directement le joueur quand il se connecte et qu'il a deja fais son choix précédemment? (ou alors, donner un objet a ce joueur qui lui interdise de choisir l'autre camp -> objet non dropable ->script pour cela ) 2. une fois dans le jeu, comment un joueur peut voir si tel ou tel joueur est dans le meme clan que lui ou non (j'avais pensé refaire toutes les armures en bleu pour un clan et en rouge pour l'autre mais c un boulot de dingue pour pas grand chose). en parcourant des forums, j'ai vu que c'etait possible avec un script qui jouait sur les factions et affichait directement l'autre personne comme ennemi ou ami. mais le script n'etait pas expliqué (ils disaient juste que c'etait assez important comme truc!) lien : [http] 3. lors de la mort d'un pj, probleme avec le respawn, j'utilise le script standard de nwn "nw_o0_respawn" ou dois-je rajouter une ligne pour que chaque pj respawn dans son camps? Merci de m'aider |
Revenir en haut | ![]() ![]() ![]() |
micka Grand Sage du Conseil ![]() Messages: 884 Localisation: /dev/null |
Ça veut dire que tu interdis les traîtres, les espions, les taupes, le double-double jeu? C'est dommage...
|
Revenir en haut | ![]() ![]() ![]() |
Wololo Légende vivante Messages: 385 |
|
Revenir en haut | ![]() ![]() ![]() |
lendraste Grand Maître Chanteur du Conseil ![]() Messages: 1403 Localisation: Quelque part ailleurs |
xelone a écrit : 1. est-il possible de rediriger directement le joueur quand il se connecte et qu'il a deja fais son choix précédemment? (ou alors, donner un objet a ce joueur qui lui interdise de choisir l'autre camp -> objet non dropable ->script pour cela ) C'est possible mais il y a un défaut. Lorsque un PJ se reconnecte à un module (un persistant), il se reconnecte à l'endroit où il l'a quitté (ou au point de démarrage de module si ce dernier a été redémarré sans sauvegarde). Même en produisant un script sur le OnClientEnter qui le téléporterait dans une zone spécifique, le chargement de la dernière zone où il se trouvait est innévitable. De ce fait, on se retrouverait avec deux chargements de zone l'un à la suite de l'autre. Néanmoins si ce défaut n'est pas un problème pour toi, tu peux utiliser les scripts suivants :
Sur le OnClientEnter Code : void main() { object oPC=GetEnteringObject(); //On récupère le PC se connectant au module if (!GetIsDM(oPC)) //On s'assure que ce n'est pas un PC de GM considérant que ceux-ci ne sont pas concernés. { SetLocalInt(oPC, "JUSTENTERED", TRUE); } } La raison de ce code est de notifier par le biais d'une variable que le personnage vient juste d'entrer dans le module. La téléportation en tant que telle doit être déportée sur le OnEnter de toutes les zones du module car il n'est pas possible d'affecter l'ActionJumpToLocation sur le OnClientEnter. Immédiatement après un OnClientEnter, le OnEnter de la zone où le personnage a déconnecté se produira : Code : void SendPCToSpecificCamp(object oPC) { if (GetIsPC(oPC)) //On s'assure que le paramètre passé est bien un PJ { int nCamp=GetCampaignInt("MACAMPAGNE", "CAMP", oPC); //On récupère le camp du PJ depuis une variable de campagne (persistante) location lLocCamp; switch (nCamp) { case 0 : //pas de camp choisi { lLocCamp=GetStartingLocation(); //Point de démarrage du module }break; case 1 : //le camp 1 { lLocCamp=GetLocation(GetObjectByTag("WP_CAMP1")); //location par rapport à un waypoint tagué WP_CAMP1 }break; case 2 : //le camp 2 { lLocCamp=GetLocation(GetObjectByTag("WP_CAMP2")); //location par rapport à un waypoint tagué WP_CAMP2 }break; } AssignCommand(oPC, CleatAllActions()); //On vide la queue d'action du PJ AssignCommand(oPC, ActionJumpToLocation(lLocCamp)); //On fait aller le PJ à la loc déterminée } } void main() { object oPC=GetEnteringObject(); //on récupère l'objet entrant dans la zone, ça peut être n'importe quoi (y compris un objet qu'on créé) if (GetIsPC(oPC)) //on ne fait quelque chose que si c'est un PC { if (GetLocalInt(oPC, "JUSTENTERED")) //On teste la variable d'entrée dans le module { DeleteLocalInt(oPC, "JUSTENTERED"); //On détruit cette variable de telle sorte que les autres OnEnter ne la retrouve pas SendPCToSpecificCamp(oPC); //Utilisation de la fonction qui s'occupe de déterminer la zone de départ. } } } J'ai imaginé la fonction SendPCToSpecificCamp qui peut être utilisée dans un autre cas de figure. Elle part du principe qu'il existe une variable persistance "CAMP" sauvée à l'aide de SetCampaignInt qui détermine le camp auquel appartien le personnage. Si cette variable n'existe pas, la valeur sera de 0 par défaut et on fera sauter le personnage sur le point de démarrage du module. S'il y est déjà, comme dans le cas de la toute première connexion au module, la transition sera imperceptible (il n'y aura pas de changement de zone). Citation : 2. une fois dans le jeu, comment un joueur peut voir si tel ou tel joueur est dans le meme clan que lui ou non (j'avais pensé refaire toutes les armures en bleu pour un clan et en rouge pour l'autre mais c un boulot de dingue pour pas grand chose). en parcourant des forums, j'ai vu que c'etait possible avec un script qui jouait sur les factions et affichait directement l'autre personne comme ennemi ou ami. mais le script n'etait pas expliqué (ils disaient juste que c'etait assez important comme truc!) lien : [http] Demande des précisions sur le sujet correspondant du forum en question. Les personnes qui ont placé les réponses le savent sûrement mieux que nous ![]() Citation : 3. lors de la mort d'un pj, probleme avec le respawn, j'utilise le script standard de nwn "nw_o0_respawn" ou dois-je rajouter une ligne pour que chaque pj respawn dans son camps? Tu pourrais rajouter la fonction que j'ai créé plus haut pour effectuer la téléportation. Mais je n'ai pas le code que tu cites sous la main pour t'indiquer précisément où appeler cette fonction.
Une remarque sur les scripts que je t'ai donné, je n'ai pas eu le loisir de les tester. Ils sont relativement proches de ce que j'ai déjà fait dans un module. A une erreur de syntaxe près, ils devraient fonctionner. _________________ Lendraste de Loreval Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel. La cité des mensonges - 1 |
Revenir en haut | ![]() ![]() ![]() ![]() ![]() |
xelone Acolyte Messages: 39 |
bon, on va simplifier le truc :
1. oublions le script qui teleporte un joueur des son entree dans le module (dsl lendraste) mais il doit surement exister un script empechant un pj de drop un objet (comme ca, il ne pourrait pas avoir l'objet des deux camps) je me fais bien comprendre? 2. oublions le script pour voir les ennemis (comme ca il pourra y avoir des taupes, ...) 3. il me faudrait aussi absolument le script pour le respaxn des deux camps (la c obligé je vais pas faire respawn tout le monde au meme endroit!!) et au fait, je suis vraiment nul en script donc si vous pouviez me mettre le script avec la rajoute, ca serait gentil. (ou alors je fais une zone neutre pour le respawn, mais j'aimerai si possible pas devoir en arriver la) merci d'avance |
Revenir en haut | ![]() ![]() ![]() |
lendraste Grand Maître Chanteur du Conseil ![]() Messages: 1403 Localisation: Quelque part ailleurs |
xelone a écrit : 1. oublions le script qui teleporte un joueur des son entree dans le module (dsl lendraste) mais il doit surement exister un script empechant un pj de drop un objet (comme ca, il ne pourrait pas avoir l'objet des deux camps) je me fais bien comprendre? On peut empêcher le drop d'un objet avec le script suivant placé dans le OnUnAcquireItem du module
Code : void main() { string sTagList = ";TAGOBJET1;TAGOBJET2;TAGOBJET3;"; //Liste des tags des objets indropables séparé par des points-virgules et sans espaces avec ; au début et à la fin object oCreature = GetModuleItemLostBy(); //Créature ayant dropé l'objet (de quelque façon que ça soit) object oItem = GetModuleItemLost(); //Objet dropé (quelle que soit la manière) string sItemName = GetName(oItem); //Récupération du nom de l'objet string sItemTag = GetTag(oItem); //récupération du tag de l'objet if (FindSubString(sTagList, ";" + sItemTag + ";")>=0) { //Le tag de l'objet appartient à la liste des tag d'objets indropables CopyObject(oItem, GetLocation(oCreature), oCreature, sItemTag); // Copie de l'objet dropé dans l'inventaire de la créature DestroyObject(oItem); // Destruction de l'objet dropé if (GetIsPC(oCreature)) { // La créature est un joueur, envoie d'un message SendMessageToPC(oCreature, "Vous ne pouvez pas vous débarrasser de " + sItemName); } } } La valeur de la chaîne sTagList est bien sûr à remplir selon tes besoins. Tu peux y mettre autant de tag d'objet indropable que la capacité d'un string le permet (donc large ![]() On peut assez facilement transformer le script pour travailler sur les ResRef au cas ou les Tag serait personnalisés. Je l'ai reproduit de mémoire, car je n'ai pas mes scripts sous la main, ni Aurora pour le tester. Ceci réponds à ta question 1. Pour le reste je n'ai pas la possibilité de répondre présentement, mais ce que tu demandes dans le 3 est possible. Il faut juste un peu de patience que quelqu'un y réponde ![]() _________________ Lendraste de Loreval Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel. La cité des mensonges - 1 |
Revenir en haut | ![]() ![]() ![]() ![]() ![]() |
xelone Acolyte Messages: 39 |
merci a toi lendraste
|
Revenir en haut | ![]() ![]() ![]() |
xelone Acolyte Messages: 39 |
euh, lendraste, est ce que ce script empeche aussi le marchandage de l'objet?
|
Revenir en haut | ![]() ![]() ![]() |
lendraste Grand Maître Chanteur du Conseil ![]() Messages: 1403 Localisation: Quelque part ailleurs |
xelone a écrit : euh, lendraste, est ce que ce script empeche aussi le marchandage de l'objet? Probable que non. Mais ça risque d'entrer en conflit avec la vente dans le sens ou la vente sera accepté, mais l'objet reviendra quand même dans l'inventaire. Le plus sûr est aussi de cocher la case relative aux objets de quête._________________ Lendraste de Loreval Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel. La cité des mensonges - 1 |
Revenir en haut | ![]() ![]() ![]() ![]() ![]() |
xelone Acolyte Messages: 39 |
et existe t il un moyen de le rendre impossible a marchander?
|
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