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 29/11/2024 07:52: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 |
P.Patoche Chevalier Messages: 70 Localisation: France 77 |
Bonjour.
Voici mon petit souci. Le script suivant fonctionne sur trois pattes, si on peut dire. NWScript :
int GetHasItemInInventory(object oTarget, object oItem) { object oSearchItem = GetFirstItemInInventory(oTarget); while(GetIsObjectValid(oSearchItem)) { if (oSearchItem == oItem) return TRUE; oSearchItem = GetNextItemInInventory(oTarget); } return FALSE; } void main() { object oCoffre = GetObjectByTag("PL_COFFRE_1"); object oItem = GetObjectByTag("IT_CLEF1"); object oTeleportWaypoint; int iIsTrue = 0; if(GetHasItemInInventory(oCoffre, oItem)) iIsTrue++; SendMessageToPC(GetFirstPC(),IntToString(iIsTrue)); oCoffre = GetObjectByTag("PL_COFFRE_2"); oItem = GetObjectByTag("IT_CLEF2"); if(GetHasItemInInventory(oCoffre, oItem)) iIsTrue++; SendMessageToPC(GetFirstPC(),IntToString(iIsTrue)); oCoffre = GetObjectByTag("PL_COFFRE_3"); oItem = GetObjectByTag("IT_CLEF3"); if(GetHasItemInInventory(oCoffre, oItem)) iIsTrue++; SendMessageToPC(GetFirstPC(),IntToString(iIsTrue)); oCoffre = GetObjectByTag("PL_COFFRE_4"); oItem = GetObjectByTag("IT_CLEF4"); if(GetHasItemInInventory(oCoffre, oItem)) iIsTrue++; SendMessageToPC(GetFirstPC(),IntToString(iIsTrue)); if (iIsTrue == 4) oTeleportWaypoint = GetObjectByTag("WP_TELEPORT_IF_TRUE"); AssignCommand(GetObjectByTag("PL_COFFRE_1"),DestroyObject(GetObjectByTag("IT_CLEF1"),90.0f)); AssignCommand(GetObjectByTag("PL_COFFRE_2"),DestroyObject(GetObjectByTag("IT_CLEF2"),90.0f)); AssignCommand(GetObjectByTag("PL_COFFRE_3"),DestroyObject(GetObjectByTag("IT_CLEF3"),90.0f)); AssignCommand(GetObjectByTag("PL_COFFRE_4"),DestroyObject(GetObjectByTag("IT_CLEF4"),90.0f)); object oPortal = GetNearestObjectByTag("PL_PORTAL"); SetLocalObject(oPortal, "Destination", oTeleportWaypoint); } J'explique: J'ai 4 coffres et 4 clefs, chaque clef vas dans un coffre bien spécifique, une fois les clefs dans les bons coffres je suis télé porter, sinon rien ne ce passe (jusqu a la tout vas bien) . Les problèmes commencent à la destruction des clefs dans les coffres, la première fois les clefs sont bien détruites dans les coffres après un temps bien défini (ici 90 secondes pour les essais), mais si je recommence les clefs soit disparaisse tout de suite et pire disparaisse de l'inventaire du joueur ci il en possède, ma question est, y'a t'il une solution a tout sa ? D'avance merci pour la ou les réponses. Patoche. Dernière édition par P.Patoche le 26/04/2007 16:58:06; édité 1 fois
|
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
NWScript :
int GetHasItemInInventory(object oTarget, object oItem) { object oSearchItem = GetFirstItemInInventory(oTarget); while(GetIsObjectValid(oSearchItem)) { if (oSearchItem == oItem) return TRUE; oSearchItem = GetNextItemInInventory(oTarget); } return FALSE; } //// void main() { object oCoffre, oItem, oTeleportWaypoint; int i = 1; int iMax = 4; int iIsTrue = 0; while(i <= iMax) { oCoffre = GetObjectByTag("PL_COFFRE_"+IntToString(i)); oItem = GetObjectByTag("IT_CLEF"+IntToString(i)); if(GetHasItemInInventory(oCoffre, oItem)) { iIsTrue++; } i++; } if (iIsTrue == 4) oTeleportWaypoint = GetObjectByTag("WP_TELEPORT_IF_TRUE"); int a = 1; int aMax = 4; while(a < aMax) { DelayCommand(90.0, DestroyObject(GetItemPossessedBy(GetObjectByTag("PL_COFFRE_"+IntToString(a)), "IT_CLEF"+IntToString(a)))); a++; } object oPortal = GetNearestObjectByTag("PL_PORTAL"); SetLocalObject(oPortal, "Destination", oTeleportWaypoint); } Bon tu m'escuseras, mais j'ai raccourci ton script à ma manière, pasque je m'y perdais super vite ... Bon, enfaite la quand tu détruis l'objet, tu ne dis pas précisément, ou il est ! Il faut que tu dises qu'il soit DANS L'INVENTAIRE DU COFFRE. Petite info: iMax = Nombre de coffre et clef maximum dans ton jeu aMax = " " " " " " Je suis pas sûr que tout fonctionne. Si mon script marche pas, t'as juste à copier coller la fonction qui t'interesse (à savoir, DelayCommand(90.0, etc...) _________________ [http] |
Revenir en haut | |
P.Patoche Chevalier Messages: 70 Localisation: France 77 |
Voila Black Knight.
le script que tu ma fourni ne marche pas du tout, sur aucun point.... ( désoler ) alors j'ai modifier le mien comme ceci. NWScript :
int GetHasItemInInventory(object oTarget, object oItem) { object oSearchItem = GetFirstItemInInventory(oTarget); while(GetIsObjectValid(oSearchItem)) { if (oSearchItem == oItem) return TRUE; oSearchItem = GetNextItemInInventory(oTarget); } return FALSE; } void main() { object oCoffre = GetObjectByTag("PL_COFFRE_1"); object oItem = GetObjectByTag("IT_CLEF1"); object oTeleportWaypoint; int iIsTrue = 0; if(GetHasItemInInventory(oCoffre, oItem)) iIsTrue++; SendMessageToPC(GetFirstPC(),IntToString(iIsTrue)); oCoffre = GetObjectByTag("PL_COFFRE_2"); oItem = GetObjectByTag("IT_CLEF2"); if(GetHasItemInInventory(oCoffre, oItem)) iIsTrue++; SendMessageToPC(GetFirstPC(),IntToString(iIsTrue)); oCoffre = GetObjectByTag("PL_COFFRE_3"); oItem = GetObjectByTag("IT_CLEF3"); if(GetHasItemInInventory(oCoffre, oItem)) iIsTrue++; SendMessageToPC(GetFirstPC(),IntToString(iIsTrue)); oCoffre = GetObjectByTag("PL_COFFRE_4"); oItem = GetObjectByTag("IT_CLEF4"); if(GetHasItemInInventory(oCoffre, oItem)) iIsTrue++; SendMessageToPC(GetFirstPC(),IntToString(iIsTrue)); if (iIsTrue == 4) oTeleportWaypoint = GetObjectByTag("WP_TELEPORT_IF_TRUE"); DelayCommand(90.0, DestroyObject(GetItemPossessedBy(GetObjectByTag("PL_COFFRE_1"), "IT_CLEF1"))); DelayCommand(90.0, DestroyObject(GetItemPossessedBy(GetObjectByTag("PL_COFFRE_2"), "IT_CLEF2"))); DelayCommand(90.0, DestroyObject(GetItemPossessedBy(GetObjectByTag("PL_COFFRE_3"), "IT_CLEF3"))); DelayCommand(90.0, DestroyObject(GetItemPossessedBy(GetObjectByTag("PL_COFFRE_4"), "IT_CLEF4"))); object oPortal = GetNearestObjectByTag("PL_PORTAL"); SetLocalObject(oPortal, "Destination", oTeleportWaypoint); } La l'item est bien prise dans le coffre, mais si on recommence, les nouvelles clefs mise dans les coffres disparaisse de suite et le compteur iIsTrue++ affiche plus le SendMessageToPC. Merci pour ta rapiditer de réponce. Patoche. |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Hmm alors ce qui bug, c'est les delay commands je pense. C'est grave si on les enlève? xD
Hmm j'vois vraiment pas d'ou ça peut venir ... Je suis désolé, je verrais plus en détail quand j'aurais le temps Sbizz _________________ [http] |
Revenir en haut | |
P.Patoche Chevalier Messages: 70 Localisation: France 77 |
Oui les delaycommands doive rester ils permettes au portail de rester ouvert le temps que les clefs sont présente dans les coffres, après plusieurs essais, je me suis appercu que le sripte fonctionne SI on ne touche pas au coffre entre temps, il faudrais trouver le moyen de les verouillier avec en condition que les 4 clefs soit dans les bon coffres, le temps que la destrution soit faite (idem en condition, les clefs dans les bon coffres, la destrution commence meme si les y'a que 2 clefs a la bonne place)et une fois les clefs detruites les coffres ce deverouillie.
Voila j'espere avoir etes clair. Patoche. |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Tu mets une fonction assez simple alors, du style:
NWScript :
void main() { DelayCommand(90.0, UNLOCK); //Ici tu unlock le coffre au bout de 90 secondes. Tape UnLock dans le filtre ^^ } Désolé que ça soit pas bien fait, mais mon éditeur bug, il me dit que j'ai plein d'erreur, et faut toujours que je reboot mon PC et ça marche 1 fois sur 5 ... -.- Sbizz EDIT: si ça marche pas, je vais essayé de faire fonctionner mon éditeur ^^ _________________ [http] |
Revenir en haut | |
P.Patoche Chevalier Messages: 70 Localisation: France 77 |
Oui mais ci je fais comme sa,
NWScript :
DelayCommand(00.1f,ActionLockObject(GetObjectByTag("PL_COFFRE_1"))); DelayCommand(90.1f,ActionUnlockObject(GetObjectByTag("PL_COFFRE_1"))); Les coffres ce verouillie et ce deverouillie meme si c'est pas la bonne clefs et je vois pas comment metre cette condition...... Patoche. |
Revenir en haut | |
Black Knight Grand Maître Chanteur du Conseil Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Dans les propriétés tu dis quel clef... et puis voila, et tu mets un tag de clef innexistant si tu veux qu'il soit impossible à ouvrir quand il est verouiller
_________________ [http] |
Revenir en haut | |
P.Patoche Chevalier Messages: 70 Localisation: France 77 |
??? la je crois que tu n'a pas compris !!!!!!
C'est la combinaison des 4 clefs déposer dans les bon coffre qui verouille les coffres. J'ai voulus faire de cette facon ...... mais bien sur ..... marche pas ... NWScript :
int GetHasItemInInventory(object oTarget, object oItem) { object oSearchItem = GetFirstItemInInventory(oTarget); while(GetIsObjectValid(oSearchItem)) { if (oSearchItem == oItem) return TRUE; oSearchItem = GetNextItemInInventory(oTarget); } return FALSE; } void main() { object oFerme; oFerme = GetLastLocked(); object oCoffre = GetObjectByTag("PL_COFFRE_1"); object oItem = GetObjectByTag("IT_CLEF1"); object oTeleportWaypoint; int iIsTrue = 0; if(GetHasItemInInventory(oCoffre, oItem)) iIsTrue++; SendMessageToPC(GetFirstPC(),IntToString(iIsTrue)); oCoffre = GetObjectByTag("PL_COFFRE_2"); oItem = GetObjectByTag("IT_CLEF2"); if(GetHasItemInInventory(oCoffre, oItem)) iIsTrue++; SendMessageToPC(GetFirstPC(),IntToString(iIsTrue)); oCoffre = GetObjectByTag("PL_COFFRE_3"); oItem = GetObjectByTag("IT_CLEF3"); if(GetHasItemInInventory(oCoffre, oItem)) iIsTrue++; SendMessageToPC(GetFirstPC(),IntToString(iIsTrue)); oCoffre = GetObjectByTag("PL_COFFRE_4"); oItem = GetObjectByTag("IT_CLEF4"); if(GetHasItemInInventory(oCoffre, oItem)) iIsTrue++; SendMessageToPC(GetFirstPC(),IntToString(iIsTrue)); if (iIsTrue == 4) oTeleportWaypoint = GetObjectByTag("WP_TELEPORT_IF_TRUE"); oFerme = GetObjectByTag("PL_COFFRE_1"); oFerme = GetObjectByTag("PL_COFFRE_2"); oFerme = GetObjectByTag("PL_COFFRE_3"); oFerme = GetObjectByTag("PL_COFFRE_4"); // DelayCommand(00.1f,ActionLockO bject(GetObjectByTag("PL_ COFFRE_1"))); // DelayCommand(60.1f,ActionUnloc kObject(GetObjectByTag("P L_COFFRE_1"))); // DelayCommand(60.0, DestroyObject(GetItemPossessed By(GetObjectByTag("PL_COF FRE_1"), "IT_CLEF1"))); // DelayCommand(60.0, DestroyObject(GetItemPossessed By(GetObjectByTag("PL_COF FRE_2"), "IT_CLEF2"))); // DelayCommand(60.0, DestroyObject(GetItemPossessed By(GetObjectByTag("PL_COF FRE_3"), "IT_CLEF3"))); // DelayCommand(60.0, DestroyObject(GetItemPossessed By(GetObjectByTag("PL_COF FRE_4"), "IT_CLEF4"))); object oPortal = GetNearestObjectByTag("PL_PORTAL"); SetLocalObject(oPortal, "Destination", oTeleportWaypoint); // return; } Patoche. |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Question : Dans quel événement est ton script ?
_________________ Module persistant dans l'univers de Star Wars : Dark Time of the Galaxy |
Revenir en haut | |
P.Patoche Chevalier Messages: 70 Localisation: France 77 |
Bonjour Enki.
Dans le Onclose des coffres. Patoche. |
Revenir en haut | |
Enki Légende vivante Messages: 432 |
Bon, il y a plusieurs erreurs dans ton script, je n'ai pas le temps de te le corriger, mais déjà, essaye d'enregistrer ton iIsTrue dans une variable, sur le module, car là, il est réinitialié à chaque fois que tu fermes ton coffre.
_________________ Module persistant dans l'univers de Star Wars : Dark Time of the Galaxy |
Revenir en haut | |
P.Patoche Chevalier Messages: 70 Localisation: France 77 |
Merci bien ... les variables ne sont pas mes amies ...mais je vais voir ...ce que je peux faire..
Patoche. |
Revenir en haut | |
P.Patoche Chevalier Messages: 70 Localisation: France 77 |
Bon ... bas .... non je n'y arrive pas .... si une personne a une idée lumineuse ...
Patoche. |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
En partant sur l'idée que les coffres ont des clefs avec un numéro similaire en fin de tag (pas pu tester pas facile à reconstituer l'environnement dans lequel ça se passe).
Par contre à la fin je suppose que tu assigne un variable au portail car sur le OnUsed tu as mit un script générique du genre "Je te téléporte à la variable objet "Destination" que je possède". Si c'est la cas il faudra pas oublier aussi qu'au bout de 90 secondes il faudra la supprimer pour être cohérent avec le reste (un simple DeleteLocalObject pour le faire). J'espère que ça marche ^^ NWScript : void main() { object oPC = GetLastClosedBy(); int i; int iIsTrue = 0; string sCoffre = "PL_COFFRE_"; string sClef = "IT_CLEF"; string sNum; for(i=1; i<5; i++) { sNum = IntToString(i); if(GetItemPossessedBy(GetObjectByTag(sCoffre+sNum), sClef+sNum) != OBJECT_INVALID) iIsTrue++; } SendMessageToPC(oPC, IntToString(iIsTrue)); if(iIsTrue == 4) { object oCoffre; for(i=1; i<5; i++) { sNum = IntToString(i); oCoffre = GetObjectByTag(sCoffre+sNum); SetLocked(oCoffre, TRUE); DestroyObject(GetItemPossessedBy(oCoffre, sClef+sNum)); DelayCommand(90.0, SetLocked(oCoffre, FALSE)); } SetLocalObject(GetObjectByTag("PL_PORTAL"), "Destination", GetObjectByTag("WP_TELEPORT_IF_TRUE")); } } _________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
P.Patoche Chevalier Messages: 70 Localisation: France 77 |
Merci bien Ivellios, tous marche pour le mieux ....
Patoche. |
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