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 16:18: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 |
Seth de Sombrelune Seigneur Messages: 156 |
Bonjour à vous.
Je cherche à retirer tout son equipement à un PJ, mais je ne veux pas detruire cet equipement, juste qu'il se retrouve dans l'inventaire du joueur. Apres recherche sur les scripts proposé ici, j'en avais trouver un qui me convenais, mais il detruit les items du personnage. J'ai donc pensé ajouté la commande "ActionUnEquipItem". Mais cela ne marche pas. Voici a titre d'exemple le script terminé, il est dans le "Action concequente" d'un dialogue : NWScript :
void main() { object oPC=GetPCSpeaker(); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_BELT, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_NECK, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)); ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC)); } Voilà si quelqun a une réponse à me donner, le script compile mais ne fonctionne pas. |
Revenir en haut | |
BlackMagik Acolyte Messages: 22 |
C'est normal que cela ne fonctionne pas il faut assigner la commande ActionUnequipItem au PJ.
NWScript :
void main() { object oPC=GetPCSpeaker(); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_BELT, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_NECK, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))); AssignCommand(oPc, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC))); } Je pense que comme ça ça marchera, essaie |
Revenir en haut | |
Seth de Sombrelune Seigneur Messages: 156 |
hum.. ça fait trop longtemps que je n'ai plus touché un script.... Comme quoi, c'est pas comme le velo, ça s'oublie vite ! Encore Merci ! |
Revenir en haut | |
Athanor salamander Légende vivante Messages: 306 Localisation: Ecole du Script |
Comme ça ça marche aussi et je pense que c même bcp plus dynamique :
NWScript :
void main() { object oPC=GetPCSpeaker(); int iSlotParam; //indice de la constante for (iSlotParam=0;iSlotParam<16;iSlotParam++){ AssignCommand(oPC, ActionUnequipItem(GetItemInSlot(iSlotParam, oPC))); } } Explication rapide : les constantes INVENTORY_SLOT_* sont des valeurs allant de 0 à 15 et définies dans les 2da. Donc n'utilisez ces constantes que si vous ne voulez déséquipper qu'un ou deux items. Si par contre vous voulez déséquiper le joueur entier, passez par une boucle avec une vvariable de 0 à 15. _________________ Atha, Artisan Scripteur. meet the most beautiful woman in the world |
Revenir en haut | |
S@ntoS Seigneur Messages: 169 Localisation: J'aimerais bien le savoir. |
Salut,
Très intéressant, ce script. Petite question de newb : j'ai une zone hanté par un mauvais génie qui s'amuse a déséquiper les PJs tous les « X » rounds. Que donnerait le script ? Et où le placer, dans le « OnHearthBeat » de la zone ? Merci d'avance. @+. F€r. _________________ L'oiseau vole, le serpent rampe et l'homme... heu, j'en sais rien. Le RP, cé vrémant tro z'injuste ! |
Revenir en haut | |
Athanor salamander Légende vivante Messages: 306 Localisation: Ecole du Script |
faut déjà que ton Jinn soit dans la zone. Mettons sont tag est : "JinnDesequippeur"
Ensuite mettre ce script, et sur l'event onheartbeat et sur l'event onuserdef de la zone du jinn. Vous remarquerez que j'ai pas mis les scripts sur le jinn, ça allège son IA au cas où il ait à se battre. NWScript :
float fTimeBetween = 3.0; void main(){ object oJinn = GetObjectByTag("JinnDesequippeur"); if (oJinn == OBJECT_INVALID || GetArea(oJinn) != OBJECT_SELF) return; // pas de jinn, pas de stripteese object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, oJinn); int nCalledBy = GetUserDefinedEventNumber(); if (nCalledBy == EVENT_HEARTBEAT){ if (GetLocalInt(OBJECT_SELF, "HeartBtOK") == 0){ SetLocalInt(OBJECT_SELF, "HeartBtOK", 1); SignalEvent(OBJECT_SELF, EventUserDefined(2000)); } else return; } else if (nCalledBy == 2000){ if (GetLocalInt(OBJECT_SELF, "HeartBtOK") == 1){ // y a t'il des PJs dans la salle ?? if (GetIsObjectValid(oPC)){ int i; while (GetIsObjectValid(oPC)){ int iSlotParam; //indice de la constante for (iSlotParam=0;iSlotParam<16;iSlotParam++){ AssignCommand(oPC, ActionUnequipItem(GetItemInSlot(iSlotParam, oPC))); } i++; oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, oJinn, i); } DelayCommand(fTimeBetween, SignalEvent(OBJECT_SELF, EventUserDefined(2000))); } // sinon abandonner le show else { SetLocalInt(OBJECT_SELF, "HeartBtOK", 0); return; } } } } Bon j'ai écrit ce script à la volée sans NWScript à coté, s'il y a des fautes, synthaxes ou autre, merci soit bah de corriger, soit de m'envoyer un MP pour que je corrige les erreurs (pas avant ce soir hein ) _________________ Atha, Artisan Scripteur. meet the most beautiful woman in the world |
Revenir en haut | |
S@ntoS Seigneur Messages: 169 Localisation: J'aimerais bien le savoir. |
Salut,
Effectivement pas avant ce soir. Je suis au boulot et je viens de parcourir ton script, impressionnant. Je le test dés que j'arrive chez moi. Question de newb : ne risque-t-il pas d'entraîner des conflits où des lourdeurs avec d'autres scripts présents dans le « OnHearthBeat » du module (Script de fatigue entre autres). Merci et à ce soir donc. @+.f€r. PS : Très bonne initiative pour l'IA. Le mauvais génie aura effectivement à se battre. _________________ L'oiseau vole, le serpent rampe et l'homme... heu, j'en sais rien. Le RP, cé vrémant tro z'injuste ! |
Revenir en haut | |
Athanor salamander Légende vivante Messages: 306 Localisation: Ecole du Script |
J'ai parlé du onheartbeat et du onuserdefined de la zone et non pas du module.
Maintenant, si tu gères autre chose dans ces events là oui il se peut qu'il y ait quelques lourdeurs, mais uniquement vraiment s'il s'agit de gros scripts. _________________ Atha, Artisan Scripteur. meet the most beautiful woman in the world |
Revenir en haut | |
S@ntoS Seigneur Messages: 169 Localisation: J'aimerais bien le savoir. |
Salut Athanor,
Je viens de tester ton script. Je l'ai bien mis dans le « OnHearthBeat » et le « OnUserDefined » de la zone concernée. J'ai bien rajouté une créature dans cette zone avec le tag précisé dans le script. Je n'ai pas constaté de conflits, ni de lourdeurs, par contre le script ne fonctionne pas. Ma créature est de nature « hostile », cela pose-t-il un problème. Au bout de combien de temps le PJ devrait-il être déséquipé ? 3 secondes ? Merci d'avance pour les réponses. @+. F€r. _________________ L'oiseau vole, le serpent rampe et l'homme... heu, j'en sais rien. Le RP, cé vrémant tro z'injuste ! |
Revenir en haut | |
Athanor salamander Légende vivante Messages: 306 Localisation: Ecole du Script |
Je veux toujours croire que ça marche alors qu'en fait apparemment ça ne marche pas bref !
Change la ligne : NWScript :
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème. en : NWScript :
if (nCalledBy != 2000){
/* warning: 1 unclosed block {} */ Si ça marche pas, je ferai mes propres tests. Je dois forcément avoir merdé qqs part. _________________ Atha, Artisan Scripteur. meet the most beautiful woman in the world |
Revenir en haut | |
S@ntoS Seigneur Messages: 169 Localisation: J'aimerais bien le savoir. |
Félicitation Athanor,
Ton script fonctionne à merveille. Je le poste pour ceux que ça intéresse. Merci beaucoup. @+. F€r. NWScript : float fTimeBetween = 1.0; void main(){ object oJinn = GetObjectByTag("oDesequippeur"); if (oJinn == OBJECT_INVALID || GetArea(oJinn) != OBJECT_SELF) return; // pas de jinn, pas de stripteese Razz object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, oJinn); int nCalledBy = GetUserDefinedEventNumber(); if (nCalledBy != 2000){ if (GetLocalInt(OBJECT_SELF, "HeartBtOK") == 0){ SetLocalInt(OBJECT_SELF, "HeartBtOK", 1); SignalEvent(OBJECT_SELF, EventUserDefined(2000)); } else return; } else if (nCalledBy == 2000){ if (GetLocalInt(OBJECT_SELF, "HeartBtOK") == 1){ // y a t'il des PJs dans la salle ?? if (GetIsObjectValid(oPC)){ int i; while (GetIsObjectValid(oPC)){ int iSlotParam; //indice de la constante for (iSlotParam=0;iSlotParam<16;iSlotParam++){ AssignCommand(oPC, ActionUnequipItem(GetItemInSlot(iSlotParam, oPC))); } i++; oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, oJinn, i); } DelayCommand(fTimeBetween, SignalEvent(OBJECT_SELF, EventUserDefined(2000))); } // sinon abandonner le show else { SetLocalInt(OBJECT_SELF, "HeartBtOK", 0); return; } } } } _________________ L'oiseau vole, le serpent rampe et l'homme... heu, j'en sais rien. Le RP, cé vrémant tro z'injuste ! |
Revenir en haut | |
Athanor salamander Légende vivante Messages: 306 Localisation: Ecole du Script |
Bah de rien
Le tout c'est aussi de le comprendre hein :lol _________________ Atha, Artisan Scripteur. meet the most beautiful woman in the world |
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