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 18:47:59
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 |
Djezebel Héros Messages: 252 |
Bonjour !
Je fais un "détecteur de drogue" et ça rate : Le PJ lançant l'effet se retrouve surchargé (la boucle ne s'arrête pas en gros) Voilà le script : NWScript :
void main() { object oPC = GetItemActivator(); object oTarget = GetItemActivatedTarget(); object oBoucle = GetFirstItemInInventory(oTarget); string sTagDrogue = "drogue"; while ( GetIsObjectValid(oBoucle)) { if ( GetTag(oBoucle) == sTagDrogue ) { DestroyObject(GetItemPossessedBy(oTarget, "drogue")); CreateItemOnObject("drogue", oPC); FloatingTextStringOnCreature("Vous trouvez quelque chose sur cette personne.", oPC, FALSE); } oBoucle = GetNextItemInInventory(oPC); // On notera effectivement la faute } } Donc en théorie, le PJ1 lance ça sur un autre PJ2 (ou une créature). Si le PJ2 a l'objet "drogue", ça renvoit un message au PJ1 : "Vous trouvez quelque chose sur cette personne". Ca détruit l'objet sur le PJ2 et le met dans l'inventaire du PJ1. Le problème c'est que ça ne semble pas se détruire sur le PJ2 et donc ça fait une boucle : le PJ1 se trouve surchargé et impossible d'arrêter le script. Des idées ? Dernière édition par Djezebel le 27/12/2005 22:11:43; édité 1 fois
|
Revenir en haut | |
castorus Acolyte Messages: 23 |
voici une réponse que je te propose ma chère Djezebel. J'ai déduit de part moi même que tu auras du malheureusement trompée dans la fonction CreateItemOnObject(); car la ou l'argument demander est le template (resref) de l'objet , apparement toi tu as nommé le tag , je pense donc que ceci devrais permettre de resoudre ton petit problème , pense bien a remplacer la valeur de la variable sResRefDrogue par le vrai resref de la drogue.
NWScript : void main() { object oPC = GetItemActivator(); object oTarget = GetItemActivatedTarget(); object oBoucle = GetFirstItemInInventory(oTarget); string sTagDrogue = "drogue"; string sResRefDrogue = "resref_drogue"; int i=0; if(GetIsPC(oTarget)==FALSE) { SendMessageToPC(oPC,"Le detecteur ne peu s'utiliser que sur les PJs."); return; } while(oBoucle!=OBJECT_INVALID) { if (GetTag(oBoucle) == sTagDrogue ) { i=i+1; DestroyObject(GetItemPossessedBy(oTarget,sTagDrogue)); CreateItemOnObject(sResRefDrogue, oPC); } oBoucle = GetNextItemInInventory(oPC); } FloatingTextStringOnCreature("Vous trouvez "+IntToString(i)+" chose(s) sur "+GetName(oTarget)+".", oPC, FALSE); } |
Revenir en haut | |
castorus Acolyte Messages: 23 |
muerf erreur d'inatention... j'ai oublier un truc !!! en fait ta boucle foirais tout connement parce que dans l'initialisation de ta variable oBoucle tu dis de prendre le premier item de l'inventaire de oTarget or dans la boucle pour la poursuite de l'analyse tu dis de prendre les objets de l'inventaire de oPC , or c'est de oTarget !!! désolé pour cette inatention ^^.
boucle corrigée ! NWScript : void main() { object oPC = GetItemActivator(); object oTarget = GetItemActivatedTarget(); object oBoucle = GetFirstItemInInventory(oTarget); string sTagDrogue = "drogue"; string sResRefDrogue = "resref_drogue"; int i=0; if(GetIsPC(oTarget)==FALSE) { SendMessageToPC(oPC,"Le detecteur ne peu s'utiliser que sur les PJs."); return; } while(oBoucle!=OBJECT_INVALID) { if (GetTag(oBoucle) == sTagDrogue ) { i=i+1; DestroyObject(GetItemPossessedBy(oTarget,sTagDrogue)); CreateItemOnObject(sResRefDrogue, oPC); } oBoucle = GetNextItemInInventory(oTarget); } FloatingTextStringOnCreature("Vous trouvez "+IntToString(i)+" chose(s) sur "+GetName(oTarget)+".", oPC, FALSE); } |
Revenir en haut | |
lylver Héros Messages: 274 |
Une fonction à tout faire pour compter et détruire un objet d'un Tag particulier
NWScript : int MustHaveNoneOf(object oPC, string sObjectTag){ int iNbItem=0,i; object oItem = GetFirstItemInInventory(oPC); while (GetIsObjectValid(oItem)==TRUE ){ if( GetTag(oItem) == sObjectTag ){ iNbItem += GetNumStackedItems(oItem) ; SetPlotFlag(oItem, FALSE) ; DestroyObject(oItem) ; } oItem = GetNextItemInInventory(oPC); } for( i=0; i < NUM_INVENTORY_SLOTS; i++){ oItem = GetItemInSlot(i, oPC) ; if( GetTag(oItem) == sObjectTag ){ iNbItem += GetNumStackedItems(oItem) ; ActionUnequipItem(oItem) ; SetPlotFlag(oItem, FALSE) ; DelayCommand(2.0, DestroyObject(oItem)) ; } } return iNbItem; } |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
Je pense qu'il serait plus judicieux de détruire l'objet ciblé dans la boucle que d'utiliser un GetItemPossessedBy.
_________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
Djezebel Héros Messages: 252 |
En effet, merci pour toutes ces indications Ivellios et Lylver ainsi qu'à toi cher Castorus
Ca marche à merveille : NWScript :
void main() { object oPC = GetItemActivator(); object oTarget = GetItemActivatedTarget(); object oBoucle = GetFirstItemInInventory(oTarget); string sTagDrogue = "drogue"; string sResRefDrogue = "drogue"; int i=0; //if(GetIsPC(oTarget)==FALSE) //{ //SendMessageToPC(oPC,"Le detecteur ne peu s'utiliser que sur les PJs."); //return; while(oBoucle!=OBJECT_INVALID) { if (GetTag(oBoucle) == sTagDrogue ) { i=i+1; DestroyObject(oBoucle); CreateItemOnObject(sResRefDrogue, oPC); } oBoucle = GetNextItemInInventory(oTarget); } FloatingTextStringOnCreature("Vous trouvez "+IntToString(i)+" chose(s) sur "+GetName(oTarget)+".", oPC, FALSE); } Merci à tous ! |
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