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







La date/heure actuelle est 30/04/2025 22:03:25
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 |
Troubadour Novice Messages: 7 |
salut les aminches. ca fait quelques temps que je parcoure ces forums et que j'utilise dans mon module perso les cripts des uns et des autres... Quel chouette concept, décidément, et je vous félicite tous pour votre passion et votre talent.
On ne peut pas dire que je sois un dieu du script, loin de là, mais j'en apprend un peu plus tous les jours. Bien sûr c'est souvent sur les choses les plus simples qu'on bute le plus, alors voilà un petit problème que je n'arrive pas à résoudre : Un forgeron propose de fabriquer un item à un PJ en échange d'une certaine somme et de plusieurs composants du même type (là il s'agit d'une épée d'argent qui sera fabriquée à partir de pépites d'argent). Je veux insérer dans une des lignes du dialogue une vérification de ce que possède le PJ : - X pièces d'or. ET : - X pépites d'argent. J'ai essayé avec GetGold et GetItemPossededBy mais le script ne se compile pas... C'est peut-être sur le chiffrage des quantités (>= X) que je bute, je ne sais pas. Comment vous y prendriez-vous ? Ensuite j'aurai un autre problème : comment faire en sorte qu'un script détruise une certaine quantité de mêmes objets possédés par un joueur ? _________________ "Oyez, oyez braves gens, etc..." |
Revenir en haut | ![]() ![]() ![]() |
Archéops Ecuyer ![]() Messages: 55 |
Salut, voici une petite fonction qui permet de donner le nombre d'objet de même tag possédés par un joueur.
oPC, c'est le joueur (que tu determines comme tu veux) rt à la place de sTag tu mets le tag de l'objet) NWScript :
int NumberItembyTag(object oPC, string sTag) { object oItem=GetFirstItemInInventory(oPC); int iCount=0; while (GetIsObjectValid(oItem)) { if (GetTag(oItem)==sTag) { iCount++; } else { } oItem=GetNextItemInInventory(oPC); } return iCount; } Aprés pour la ressortir dans un dialogue, je pense qu'il faut stocker la variable sur le joueur par exemple. Pour contre, je ne sais pas comme la ressortir dans le dialogue. Faut voir comment les variables génériques fonctionnent... Une dernière chose, pour détruire les objets, l faut juste rajouter un DestroyObject(oItem) entre les deux accolades du if... |
Revenir en haut | ![]() ![]() ![]() |
grosraoul Ecuyer Messages: 60 |
voila ton script qui devrait marcher je pense
NWScript :
#include "nw_i0_tool" void main() { //declarations object oPC=GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); object oItem=GetObjectByTag("tag_de_tes_cristaux"); int iNombre; //verifie si le PC a l'objet et compte le nombre qu'il possede if (HasItem(oPC,"tag_de_tes_cristaux")==TRUE) { iNombre=GetItemStackSize(oItem); } //le forgeron avise alors if ((iNombre>=quantite_de_cristaux) && (GetGold(oPC)>=cout_de_l'operation)) { definir la variable locale qui va bien pour acceder a un dialogue du genre : ok , tu as assez de cristaux je vais te faire ca . } else { definir la variable locale qui va bien pour acceder a un dialogue du genre : c'est pas bon , tu as soit pas assez de thunes, soit pas assez de cristaux } } edit : j'avais pas pensé au fait que ces objets n'etaient pas stackables. au temps pour moi, le premier script est mieux que le mien. |
Revenir en haut | ![]() ![]() ![]() ![]() |
Troubadour Novice Messages: 7 |
Merci pour vos réponses, et rapides en plus !
![]() Je vais tester ça et je vous donne des nouvelles. Grosraoul ton script me sera utile plus tard lorsque j'utiliserai les gemmes stackables dans ma forge d'objets magiques... Je sais qu'il existe de gros scripts de "craft" créés par de vrais malades, j'en ai testé et il est vrai que c'est tentant de les utiliser mais bon... C'est tellement plus amusant quand on essaye de faire les choses soi-même. ![]() _________________ "Oyez, oyez braves gens, etc..." |
Revenir en haut | ![]() ![]() ![]() |
Troubadour Novice Messages: 7 |
EDIT DE MON POST
Voilà j'ai pris quelques instants pour bricoler un peu ce script; j'ai utilisé certaines de vos idées et j'ai trafiqué pour le reste... Et test effectué ça ne fonctionne PAS... J'ai enlevé l'item non-stackable et l'ai remplacé par un stackable, créé à partir du modèle "billes de frondes"... (On peut donc utiliser les pépites d'argent comme des billes de frondes, ça fait cher le tir mais bon...). Bon, voilà le script fini. NWScript :
//: ![]() //:: FileName sc_cond_craft1 //: ![]() //: ![]() //:: Created By: Script Wizard //:: Created On: 18/09/2004 16:25:12 //: ![]() #include "nw_i0_tool" int StartingConditional() { object oItem=GetObjectByTag("tag de l'objet"); object oPC=GetPCSpeaker(); if ((GetItemStackSize(oItem)>=nombre d'objets) && (GetGold(oPC)>=nombre de p.o.)) return FALSE; return TRUE; } Je reprécise que pour le moment ça ne fonctionne PAS ! Qu'est-ce qui se passe ? Ben, RIEN. C'est comme s'il n'y avait pas de script du tout. Le dialogue renvoie à la réplique à laquelle est liée le script "oui je possède tout ça" alors que mon PJ n'a aucune pépite dans son inventaire et une somme d'or insuffisante... Je ne sais pas où ça merde, des idées ? _________________ "Oyez, oyez braves gens, etc..." |
Revenir en haut | ![]() ![]() ![]() |
grosraoul Ecuyer Messages: 60 |
la condition de ton script est la suivante :
SI le pj a au moins 1 bille ET au moins 1 po alors je renvoi FAUX (en suposant que le nombre est 1 pour simplifier) SINON je renvoi VRAI Ca veux dire que ton script doit etre une condition qui amene un dialogue du marchand du genre : "vous n'avez pas assez de billes ou bien pas assez d'or " est ce que c'est bien ce que tu voulais ? |
Revenir en haut | ![]() ![]() ![]() ![]() |
Troubadour Novice Messages: 7 |
Effectivement j'aurais dû inverser le TRUE et le FALSE pour rester dans ma logique narrative... Mais dans le cas présent, ce que le script devrait faire c'est renvoyer à la réplique SUIVANTE ou à une fin de dialogue lorsque le PJ possède au moins X billes ET au moins X or.
Pourtant il ne le fait pas, qu'il y ai une réplique suivante dans le dialogue ou pas. J'ai essayé en inversant le TRUE et le FALSE, le résultat est le même. C'est comme si le dialogue ignorait le script. Je n'ai pas la moindre idée de ce qui ne va pas. Le script est correctement compilé, sans erreurs... GetItemStackSize peut bien être associé à un comparatif numérique, de même que GetGold (ce qui n'est pas le cas de GetItemPossededBy apparement)... Je vais essayer d'autres trucs mais si je n'y arrive pas je vais procéder autrement : je pourrais mettre dans ma mine un plaçable "forge" qui permet de "fondre" un certain nombres de pépites pour obtenir différents lingots. Ainsi je ne serai pas obligé d'inclure dans le script de forgeron ces vérifications de quantité qui semblent foutrent la merde. _________________ "Oyez, oyez braves gens, etc..." |
Revenir en haut | ![]() ![]() ![]() |
grosraoul Ecuyer Messages: 60 |
a mon avis, il y'a une autre ligne dans ton dialogue qui shunte cette condition. OU bien ce n'est peut etre pas les bon tags , ou alors il y'a une erreur mais je la vois pas
![]() il faudrait que tu nous fasses passer l'arbre de dialogue déplié pour voir. |
Revenir en haut | ![]() ![]() ![]() ![]() |
Archéops Ecuyer ![]() Messages: 55 |
Re..
Pour ton script, j'écrirai plutôt ça : NWScript :
#include "nw_i0_tool" int StartingConditional() { object oPC=GetPCSpeaker(); object oItem=GetItemPossessedBy(oPC,"tag de l'objet"); return (((GetItemStackSize(oItem)>=0) && (GetGold(oPC)>=0))); } Bien sûr, tu remplace les zéro par la valeur que tu veux... Je sais pas si ça marche mais à mon avis la fonction GetItemPossessedby et plus appropriée... |
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