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 21:03:17
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 |
Albator003 Invité |
Bonjour a tous,
J'ai tester pas mal de script qui "nottoye les zones" et aucun ne ma vraimeent convaincu, soit ca ramasse que les drop des Pj soit ca rammasse certain drop de monstres... alors je prefere me lançer dans un script perso. Mais j'ai un problème pour définir les drop des monstres : je m'explique Alors ce que je veux faire c'est que quand un drop ou plus sont fais de la part de monstres ou PJ et que il n'y pas plus aucun Pj dans la zones celle ci est nettoyer le probleme c'est que je ne vois pas comment récuprer les drops des monstres alors j'ai regarder dans la palette et j'ai récuprer le tags d'un sac par exemple(identique a un drop) : par exemple le tag "LootBag1" hélas ceci ne fais rien car a mon avis le drop du monstre n'a pas le tag de l'objet "sac" dans la palette donc ma question est qu'elle est le tag d'un drop ? je pense qu'il doivent tous commencer par les meme lettre donc pour le script on peux detruire tout les tags commencant par les meme lettres Sinon autre chose est-ce que le tag du drop ne change pas selon si on a mis un drop obligatoire sur un monstre? Si quelqun pourrai m'aider ca serai sympa, pour ma part je retourne faire des test sur ce systeme JE VAIS Y ARRIVER !!! |
Revenir en haut | |
Albator003 Invité |
J'ai trouvé mon bonheur donc le tag des Reste c'est BodyBag mais j'ai pas bien plus avancer puisque mon script ne marche toujours pas alors je le met et si quelqun voit d'ou vien le pobleme ca serai bien gentil de sa part de me dire ou est le probleme
NWScript :
int GetIsPCInArea (object oArea) { object oObjet = GetFirstObjectInArea(oArea); while(GetIsObjectValid(oObjet)) { return TRUE; oObjet = GetNextObjectInArea(oArea); } return FALSE; } void main() { object oArea = OBJECT_SELF; if(!GetIsPCInArea(oArea)) { object oObjet = GetFirstObjectInArea(oArea); while(GetIsObjectValid(oObjet) && !GetIsPC(oObjet)) { int nType = GetObjectType(oObjet); switch(nType) { case OBJECT_TYPE_PLACEABLE: // pour les drops if(GetTag(oObjet) == "BodyBag") { object oObjet = GetFirstObjectInArea(oArea); while(GetIsObjectValid(oObjet)) { DestroyObject(oObjet); oObjet = GetNextObjectInArea(oArea); } } break; case OBJECT_TYPE_CREATURE: // pour les cratures if(GetIsEncounterCreature(oObjet)) { DestroyObject(oObjet); } break; } oObjet = GetNextObjectInArea(oArea); } } } franchement je vois pas d'ou vien le problème si y'a des idées je suis preneur j'ai deja fais au moins 20 test je suis pas a 10 test de plus lol Merci. |
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
Heu... T sur que ton BodyBag, c'est un OBJECT_TYPE_PLACEABLE?
J'aurais bien mis OBJECT_TYPE_ITEM, chais pas... Heu... C tout ce que je vois pour l'instant, désolé... _________________ 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 | |
Albator003 Invité |
un objet de type item ne peux ouvrir un inventaire en étant a terre la seul chose possible est de le prendre donc pour ne pas dir que j'en suis sur je dirai que a 99% l'objet droper est un placeable avec un inventaire mais merci de ton idée y'a que comme ca que j'arriverai ou quon arrivera a finir ce script
|
Revenir en haut | |
Albator003 Invité |
J'ai allégé le script pour faire juste un DestoyObject sur les drops aparament le script marche mais le probleme c'est que il aime pas la boucle... car en cour de jeu un message apparait disant TOO MANY INSTRUCTION : TAG
Alors la je sais plus quoi faire ...Je me demande si un jour j'arriverai a faire ce script Voila le script NWScript :
void main() { object oArea = OBJECT_SELF; object oObjet1 = GetFirstObjectInArea(oArea); int nType = GetObjectType(oObjet1); while(GetIsObjectValid(oObjet1) && nType == OBJECT_TYPE_PLACEABLE) { object oObjet1 = GetFirstObjectInArea(oArea); while(GetIsObjectValid(oObjet1)&& GetTag(oObjet1) == "BodyBag") { DestroyObject(oObjet1); oObjet1 = GetNextObjectInArea(oArea); } oObjet1 = GetNextObjectInArea(oArea); } } Si quelqun comprend pourquoi il me dis TOO MANY..blabla ca m'aiderai beaucoup sachant que dans la zone je dois avoir environ 20 placeables (portes,arbre,etc..) Lors de mon test j'ai fais un drop de 5 objets donc pas beaucoup et ... |
Revenir en haut | |
kiky.le.magnifique Homme très gay Messages: 907 Localisation: Camping de la nation martienne... |
Je ne sais pas pourquoi ça foire, mais pourquoi as tu imbriqué deux boucle comme ça? Une seule aurais suffit non? En fait, c'est carement le test pour savoir si c'est un placeable qui sert à rien, là
NWScript :
void main() { object oArea = OBJECT_SELF; object oObjet1 = GetFirstObjectInArea(oArea); int nType = GetObjectType(oObjet1); while(((GetIsObjectValid(oObjet1))&&(nType == OBJECT_TYPE_PLACEABLE)) ||(GetIsObjectValid(oObjet1)&&(GetTag(oObjet1) == "BodyBag"))) { DestroyObject(oObjet1); oObjet1 = GetNextObjectInArea(oArea); } } Là, en théorie, ça te vire tous les placeable + les items de tag BodyBag... _________________ 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 | |
Archéops Ecuyer Messages: 55 |
Salut ...
Pour ma part je créerai une boucle similaire à la votre mais comme ceci... NWScript :
object oArea = OBJECT_SELF; object oObjet1 = GetFirstObjectInArea(oArea); int nType = GetObjectType(oObjet1); while (GetIsObjectValid(oObjet1)) { if ((nType == OBJECT_TYPE_PLACEABLE)||(GetTag(oObjet1) == "BodyBag")))/* suspect parenthesis end found !*/ { DestroyObject(oObjet1); } oObjet1 = GetNextObjectInArea(oArea); } J'ai fais comme cela car en général les conditions multiples sur while ça foire, dans mieux vaut mettre des if, c'est plus prudent.. |
Revenir en haut | |
Albator003 Invité |
Citation : mais pourquoi as tu imbriqué deux boucle comme ça? La premiere boucle est pour faire defiler tout les objet et la seconde boucle pour detruire tout les objet de tag "BodyTag"
Je pense avoir compris en faite ma premiere boucle ne s'arrete jamais puisque elle trouve toujours des objet placeable... Citation : Là, en théorie, ça te vire tous les placeable + les items de tag BodyBag... Et ca j'ai deja essayer mais alors la bug total y'a tout qu iest supprimer(a savoir les WP, les trans, declancheur etc...) donc pas bonne solution en gros ca detruit la zone.
J'ai quand meme essayer vos script sauf que j'ai changer vos || en && sinon ca detruit tout les placeable.Et c'est sans suite toujours le meme probleme les drops sont toujours la. J'ai donc re fais un test au j'ai laisser quelque drop a terre j'ai enregistrer la partie en cours de jeu et je suis retourner dans l'éditeur et j'ai ouvert la sauvegarde. Les tag des reste est bien BodyBag mais par contre les drops n'ont pas de resref...Reste a savoir si ca viens pas de la... Je suis parti donc sur une autre idées que j'ai tester sur un trigger un script que j'ai placer sur le OnEnter. Le principe est un peu différent juste un script de test qui prend les item compris dans le drop..donc qui detruit le drop et ca sa marche *A le cerveau retourner* NWScript :
void main() { object oPC = GetEnteringObject(); object oObjet1 = GetNearestObjectByTag("BodyBag",oPC); object oObject = GetFirstItemInInventory(oObjet1); while(GetIsObjectValid(oObject)==TRUE) { DestroyObject(oObject); oObject = GetNextItemInInventory(oObjet1); } } Le probleme de maintenant c'est que il n'y a plus de boucle pour les et donc il prend le drops le plus proche et le vide (celui ci disparait) |
Revenir en haut | |
olfleouf Acolyte Messages: 35 |
je ne suis pas sur d'avoir tout compris au problème mais veux-tu vraiment détruire les placeables de la zone? Si c'est non, ceci devrait suffire :
NWScript : void main() { object oArea = OBJECT_SELF; //on va chercher le premier objet de la zone object oObjet1 = GetFirstObjectInArea(oArea); //tant que l'on n'a pas fait tout les objets while(GetIsObjectValid(oObjet1)) { //si l'objet a le bon tag (condition suffisante sauf si tu utilises ce tag) if (GetTag(oObjet1) == "BodyBag") { DestroyObject(oObjet1); } oObjet1 = GetNextObjectInArea(oArea); } } _________________ Arkanis, forum jeux de rôle dungeons et dragons 3.5 |
Revenir en haut | |
Muad'Dib Maitre de Dune Grand Chevalier Messages: 124 Localisation: Dans un petit trou de ver des sable a coté de nice |
Si c'est pour les drop de monstre ou pour tout object a terre, sa sa irait..
NWScript :
#include "nw_i0_plot" void main() { object oItem = GetNearestObject(OBJECT_TYPE_ITEM, OBJECT_SELF,1); object oPinguouin = CreateObject(OBJECT_TYPE_CREATURE,"resref_de_pinguin",GetLocation(oItem),FALSE,"ping"); // bon certain truc c'est pour le fun, mais c'est assez joli a voir -.- ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectVisualEffect(VFX_IMP_SPELL_MANTLE_USE),oItem); DelayCommand(1.5,ApplyEffectAtLocation(DURATION_TYPE_PERMANENT,EffectVisualEffect(VFX_IMP_DEATH_L),GetLocation(oItem))); DelayCommand(2.0,AssignCommand(oPinguouin,ActionPickUpItem(oItem))); DelayCommand(3.0,EscapeViaTeleport(oPinguouin)); DelayCommand(4.0,DestroyObject(oItem)); } A mettre sur le onHeartBeat d'un placeable non statique... _________________ Minsc et Bouh sont prets..*Petits bruits de hamster geant miniature* Rejoignez le Module de Bladur's Gate 2, et jouez sur Dune en arene |
Revenir en haut | |
Albator003 Invité |
J'aimerai vous dire que ca y est ca marche hélas non toujours pas j'ai tester to nscript olfleouf sans succes quand a ton script mouad'dib je connais ce systeme et ce n'est pas ce que je veux en plus il ramasse que les drop des joueur car il y a un OBJECT_TYPE_ITEM or le drop est un placeable je tenterai de modif to nscript pour faire ce que je veux mais avant tout je voulais limiter l'utilisation d'une creature pour detruire les drop.
En tout cas merci d'apporter vos idées et votre soutient |
Revenir en haut | |
olfleouf Acolyte Messages: 35 |
Tu es bien sur que leur tag est BodyBag? Mon script ne fonctionne pas où fait des erreurs? (genre TOO many instruction) Si tu met ca :
NWScript :
void main() { object oTarget = OBJECT_SELF; object oBody = GetNearestObjectByTag("BodyBag", oTarget); string sName = GetName(oBody); object oPC = GetFirstPC(); SendMessageToPC(oPC, sName); } Ca donne quoi? Et aussi tu l'as mit où mon script? (le premier), celui la est à mettre dans un oHB d'un objet de la zone) _________________ Arkanis, forum jeux de rôle dungeons et dragons 3.5 |
Revenir en haut | |
Mr-XXS Ecuyer Messages: 49 |
Les drops de monstres sont un peu particuliers...
Ils ont pour nom ... heu : "Restes" sans doute mais je suis pas sur, peu importe. Pour tag : "BodyBag" la je confirme. Pour resref : "" ... pas de resref quoi. Ensuite, pour ce qui est du type d'objet, je ne sais pas trop ... sans doute est il considéré comme un placable mais un placable tres spécial. En effet, chaque drop est lié a une créature. En fait, je pense que l'on peut dire qu'il s'agit de l'inventaire de la créature ou meme de la créature elle meme (je préfere quand meme penser qu'il s'agit de son inventaire.) Et ces drops apparaissent tant que l'inventaire de la créature qu'ils représente n'est pas vide. S'il est vide, il disparaissent d'eux meme (sauf en cas de bug). Par conséquent, un script dans ce genre peut fonctionner (a insérer dans un autre suivant a quel moment et sous quelles conditions on veut nettoyer la zone) NWScript : void VideInv(object oObj); void main() { object oArea = OBJECT_SELF; object oObj = GetFirstObjectInArea(oArea); while(oObj != OBJECT_INVALID) //On recherche tous les drops. { if(GetTag(oObj) == "BodyBag") VideInv(oObj); oObj = GetNextObjectInArea(oArea); } } void VideInv(object oObj) { object oItem = GetFirstItemInInventory(oObj); while(oItem != OBJECT_INVALID) //On vide l'inventaire { DestroyObject(oItem); oItem = GetNextItemInInventory(oObj); } DestroyObject(oObj, 0.5); } |
Revenir en haut | |
Albator003 Invité |
Un gros merci !!! a tous ! plus particulièrement a Mr-XXS puisque son script est carement ce que je veux donc j'ai rien a modif enfin juste quelque ligne a ajouter et c'est bon je donne donc le script que j'ai finalement fais pour moi a l'aide des autres idées sachant que celui de Mr-XXS marche tres bien pour virer les drops(meme sur un delcancheur)
Donc voila le mien NWScript :
int GetIsPCInArea (object oArea) { object oCreature = GetFirstObjectInArea(oArea); while(GetIsPC(oCreature) == TRUE) { return TRUE; oCreature = GetNextObjectInArea(oArea); } return FALSE; } void VideInv(object oObj); void main() { object oArea = OBJECT_SELF; if (!GetIsPCInArea (oArea)) { object oObj = GetFirstObjectInArea(oArea); while(oObj != OBJECT_INVALID) //On recherche tous les drops. { if(GetTag(oObj) == "BodyBag") VideInv(oObj); oObj = GetNextObjectInArea(oArea); if(GetObjectType(oObj)== OBJECT_TYPE_CREATURE) if(GetIsEncounterCreature(oObj)) DestroyObject(oObj); } } } void VideInv(object oObj) { object oItem = GetFirstItemInInventory(oObj); while(oItem != OBJECT_INVALID) //On vide l'inventaire { DestroyObject(oItem); oItem = GetNextItemInInventory(oObj); } DestroyObject(oObj, 0.5); } voila j'en dis pas plus c'est largement compréhensible |
Revenir en haut | |
Cocasso Ecuyer Messages: 41 |
Merci pour ce script...^^
|
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