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 22:35:39
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 |
Drako Novice Messages: 8 |
J'aimerais faire commencer mes joueurs sans aucun matériel (à poil quoi !) comment faire ?
_________________ Il est des gens qui observent les rêgles de l'honneur comme on observe les étoiles De loin ! |
Revenir en haut | |
Konrad Grand Maître Chanteur du Conseil Messages: 1258 Localisation: Empire d'Halöven |
Tiens, j'ai fais ça sur mon module L5A, ça peut t'aider :
NWScript :
object oUser = GetEnteringObject(); object oItem = GetFirstItemInInventory(oUser); object oCoffre = GetObjectByTag("kofr_start"); int i; int iGold = GetGold(oUser); if ((GetName(oUser) == "Titisa Kitsuki") && (GetLocalInt(oUser, "ENTER") == 0) /*&& (GetIsDM(oUser) == TRUE)*/) { CreateItemOnObject("katana", oUser); SetLocalInt(oUser, "ENTER", 1); // SetXP (oUser, 50000); } else if (GetIsPC(oUser) && (GetLocalInt(oUser, "ENTER") == 0)) { if (GetItemInSlot(INVENTORY_SLOT_CHEST, oUser) == OBJECT_INVALID) CreateItemOnObject("cloth024", oCoffre); while (GetIsObjectValid(oItem)) { AssignCommand(oCoffre, ActionTakeItem(oItem, oUser)); oItem = GetNextItemInInventory(oUser); } for(i = 0 ; i <= NUM_INVENTORY_SLOTS ; i++) { AssignCommand(oCoffre, ActionTakeItem(oItem, oUser)); oItem = GetItemInSlot(i,oUser); } AssignCommand(oCoffre, TakeGoldFromCreature(iGold, oUser)); /* warning: 1 unclosed block {} */ Le truc c'est que moi, je met tout l'équipement dans un coffre "kofr_start" mais après rien ne t'empèche de détruire le coffre... _________________ Le site du Module Dragon Noir Le groupe du Module L5A - L'ombre et la Lumière Crimson Skies |
Revenir en haut | |
Drako Novice Messages: 8 |
Alors je vais m'expliquer, je suis un débutant et je suis nul en prog donc, je te remerci pour le script, mais tu m'aiderais si tu me disait genre ou tu met ça ?
_________________ Il est des gens qui observent les rêgles de l'honneur comme on observe les étoiles De loin ! |
Revenir en haut | |
Konrad Grand Maître Chanteur du Conseil Messages: 1258 Localisation: Empire d'Halöven |
C'est vrai qu'il est un peut brute de fonderie là vu que j'ai fait un copier coller directe de mon module.
Enfaite tu va dans les propriétés de la première zone de ton module, là où arrive les PJ. Dans le champ "Onenter" se trouve le script que se déclanche à l'entrée d'un objet dans la zone (un joueur par exemple) Tu colles donc ce script à cette endroit mais faut que tu adaptes en fonction de ton module. Il faut que dans ta zone il y ai un placable avec inventaire qui ai le TAG 'kofr_start' NWScript :
main() { // Recuperer l'objet enrant dans la zone object oUser = GetEnteringObject(); // Trouver le premier objet dans l'inventaire de l'objet entrant object oItem = GetFirstItemInInventory(oUser); // Trouver l'objet 'kofr_start' object oCoffre = GetObjectByTag("kofr_start"); int i; int iGold = GetGold(oUser); if (GetIsPC(oUser) && (GetLocalInt(oUser, "ENTER") == 0)) { if (GetItemInSlot(INVENTORY_SLOT_CHEST, oUser) == OBJECT_INVALID) CreateItemOnObject("cloth024", oCoffre); while (GetIsObjectValid(oItem)) { AssignCommand(oCoffre, ActionTakeItem(oItem, oUser)); oItem = GetNextItemInInventory(oUser); } for(i = 0 ; i <= NUM_INVENTORY_SLOTS ; i++) { AssignCommand(oCoffre, ActionTakeItem(oItem, oUser)); oItem = GetItemInSlot(i,oUser); } AssignCommand(oCoffre, TakeGoldFromCreature(iGold, oUser)); //Si tu veux que ses objets disparaisse, il suffit d'ajouter cette ligne : // DestroyObject(oCoffre); } /* warning: 1 unclosed block {} */ Dans mon module le kofr_start et verrouillé et impossible a ouvrir. Tu peux aussi le mettre dans un endoit inaccessible. _________________ Le site du Module Dragon Noir Le groupe du Module L5A - L'ombre et la Lumière Crimson Skies |
Revenir en haut | |
Drako Novice Messages: 8 |
merci:grin:
_________________ Il est des gens qui observent les rêgles de l'honneur comme on observe les étoiles De loin ! |
Revenir en haut | |
Drako Novice Messages: 8 |
heu, y as pas un end à mettre à la fin ? parceque je n'arrive pas compiler le script
_________________ Il est des gens qui observent les rêgles de l'honneur comme on observe les étoiles De loin ! |
Revenir en haut | |
Drako Novice Messages: 8 |
26/07/2004 16:08:02 : Erreur. 'sc_001' n’est pas compilé.
sc_001.nss(41): ERREUR : UNEXPECTED END COMPOUND STATEMENT voila mon message d'erreur _________________ Il est des gens qui observent les rêgles de l'honneur comme on observe les étoiles De loin ! |
Revenir en haut | |
Laxam Légende vivante Messages: 425 Localisation: Lyon |
Il manque juste une accolade fermante à la fin.
_________________ Mon site NWN nouvelle version et mon module Boisperdu en ligne ! Et maintenant un FORUM La première version française de la doc du NPC Activities (version 2.0) |
Revenir en haut | |
Elanam Alarune Novice Messages: 19 Localisation: Dans les Bas Fonds de Kemper, là où les korrigans dansent la gigue |
Bonjour à vous tous.
Une autre manière consiste à détruire un par un tous les objets de l'inventaire. Cela permet de choisir quels objets enlever et quels objets garder. NWScript :
void main () //supprime tous l'equipement object oPC = GetEnteringObject (); if (! GetIsPC(oPC)) return ; object oItem; oItem = GetItemInSlot(INVENTORY_SLOT_HEAD, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_ARMS, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_BELT, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_HEAD, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_NECK, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC); if (GetIsObjectValid(oItem)) DestroyObject(oItem); oItem = GetFirstItemInInventory( oPC ); while( oItem != OBJECT_INVALID ) { DestroyObject( oItem ); oItem = GetNextItemInInventory( oPC ); } DestroyObject(OBJECT_SELF, 1.0); }/* suspect block end found !*/ Bon, voilà, c'est un peu contraignant mais ça te permet de choisir les objets à enlever et tu ne crées pas de coffre qu'il faut ensuite supprimer. _________________ Nous sommes des héros, Bouh ! Les rodeurs et les hamsters, partout, content nos exploits ! |
Revenir en haut | |
lendraste Grand Maître Chanteur du Conseil Messages: 1403 Localisation: Quelque part ailleurs |
Elanam Alarune a écrit : Bonjour à vous tous.
Les constantes INVENTORY_SLOT_XXXXXX représentant des valeurs numériques entre 0 et 17, la solution suivante (sous forme de fonction réutilisable) est moins contraignante. Par ailleurs si on veut épargner des emplacements particuliers, il suffit d'effectuer un test sur le valeur de nCnt
Une autre manière consiste à détruire un par un tous les objets de l'inventaire. Cela permet de choisir quels objets enlever et quels objets garder. .../... Bon, voilà, c'est un peu contraignant mais ça te permet de choisir les objets à enlever et tu ne crées pas de coffre qu'il faut ensuite supprimer. NWScript : void EmptyCreatureInventoryAndSlots(object oCreature) { object oItem; int nCnt; for (nCnt=0; nCnt<=17; nCnt++) { oItem = GetItemInSlot(nCnt, oCreature); if (GetIsObjectValid(oItem)) { DestroyObject(oItem); } } oItem = GetFirstItemInInventory( oCreature ); while( oItem != OBJECT_INVALID ) { DestroyObject( oItem ); oItem = GetNextItemInInventory( oCreature ); } } _________________ Lendraste de Loreval Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel. La cité des mensonges - 1 |
Revenir en haut | |
Drako Novice Messages: 8 |
si l'accolade c'est " } " alors j'y pensé et je l'ai mis mais ça donne toujours ce message d'erreur
_________________ Il est des gens qui observent les rêgles de l'honneur comme on observe les étoiles De loin ! |
Revenir en haut | |
Albator003 Invité |
Voila ce que j'utilise enfin une partie de mon OnCLientEnterModule
NWScript : void main() { object item; object oPC = GetEnteringObject(); // le joueur entrant if (GetIsPC(oPC) && !GetIsDM(oPC))// si c'est un joueur et non un DM { if(GetXP(oPC) == 0 )// si il est nouveau { item = GetFirstItemInInventory(oPC); while (GetIsObjectValid(item)) // boucle qui vide l'inventaire { DestroyObject(item); item = GetNextItemInInventory(oPC); } DestroyObject(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_BELT, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_NECK, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC)); int nInt; nInt=GetGold(oPC);// on prend l'or du joueur nouveau AssignCommand(oPC, TakeGoldFromCreature(nInt, oPC, TRUE)); item = CreateItemOnObject("vetementdedebut", oPC); DelayCommand(1.0,AssignCommand(oPC,ActionEquipItem(item, INVENTORY_SLOT_CHEST))); DelayCommand(3.0,GiveGoldToCreature(oPC,500));// on lui donne 500 Po GiveXPToCreature(oPC, 1); // on donne 1 xp pour identifier le joueur comme non nouveau } } } |
Revenir en haut | |
Konrad Grand Maître Chanteur du Conseil Messages: 1258 Localisation: Empire d'Halöven |
Drako a écrit : si l'accolade c'est " } " alors j'y pensé et je l'ai mis mais ça donne toujours ce message d'erreur il est manque peut être plusieurs
Les truc c'est que j'ai un peu trop épurer mon script de départ pour te montrer l'exemple car al'origine mon script met le PJ tout nue l'alonge et le fait dormir avec des petit ZZZ sur sa tête... Enfin, la tu as le choix avec tout ces scripts... _________________ Le site du Module Dragon Noir Le groupe du Module L5A - L'ombre et la Lumière Crimson Skies |
Revenir en haut | |
Devilon Bersek Ecuyer Messages: 59 Localisation: Certainement dans une forge...sinon a Beaune |
salut, bon, je souhaite faire en gros la meme chose, mais au moment de mourir, pour une mort definitive...genre je clique sur des flammes, et pof plus rien, plus d'xp, plus de po, plus d'equipement....seulement voilà, j'arrive a detruire les objets equipés, mais pas ceux de l'inventaire, j'arrive pas a inclure le "boucle de destruction" ^^
voilà mon script, un peu fouilli mais bon.... NWScript :
void RemoveXPFromParty(int nXP, object oPC, int bAllParty=TRUE) { if (!bAllParty) { nXP=(GetXP(oPC)-nXP)>=0 ? GetXP(oPC)-nXP : 0; SetXP(oPC, nXP); } else { object oMember=GetFirstFactionMember(oPC, TRUE); while (GetIsObjectValid(oMember)) { nXP=(GetXP(oMember)-nXP)>=0 ? GetXP(oMember)-nXP : 0; SetXP(oMember, nXP); oMember=GetNextFactionMember(oPC, TRUE); } } } void main() { object oPC = GetLastUsedBy(); if (!GetIsPC(oPC)) return; object oTarget; oTarget = oPC; effect eEffect; eEffect = EffectDeath(); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oTarget); RemoveXPFromParty(999999, oPC, FALSE); //enleve xp int nInt; nInt=GetGold(oPC); //enleve or AssignCommand(oPC, TakeGoldFromCreature(nInt, oPC, TRUE)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_BELT, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_NECK, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)); DestroyObject(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC)); } voilà, si on peut m'aider, merci d'avance _________________ Rien n'est grave dans la vie...sauf de la perdre... Chroniques des Royaumes Perdus : [http] |
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