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:20:03
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 |
S@ntoS Seigneur Messages: 169 Localisation: J'aimerais bien le savoir. |
Salut à vous nobles entre les nobles,
Je fais encore appel à vos lumières pour guider les malheureux égarés dans les ténèbres épaisses des scripts. Ô vous qui avez extirpé le feu sacré des entrailles fumantes de l'enfer, vous qui avez occis le monstre gardien de la sagesse ancestrale, qui vous êtes oint de son sang consacré, vous qui avez humez son souffle incandescent, et pourtant êtes encore vivants – ô combien la vie est belle, ayez un regard pour la misérable créature que je suis. Me voilà comme une braise qu'un simple courant d'air éteint. Vous avez jadis déposez vos trésors au creux de mon calice, mais jamais en moi le feu ne reprend. Voici donc ma requête et - je sais que je l'aurais oublié aussitôt posée. Que les instances miséricordieuses me prennent en pitié : 1 | Je cherche à créer un trigger qui ramène le PJ au niveau 1 (ça encore, c'est facile. Je sais faire). 2 | Qui dépossède le PJ de tout son équipement (Or y compris, si possible). 3 | Qui ne détruise pas l'équipement (ni l'or si possible) du PJ mais le téléporte dans un coffre (le coffre se trouve dans une zone différente de celle du trigger). Heu... d'avance, merci beaucoup. PS : Aucune forme de rétribution ne sera acquittée pour ce travail qui s'avère donc par voie de conséquence purement bénévole. – Je sais c'est malheureux, mais je suis fauché grave. @musez-vous bien. 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 | |
Athanagorn Acolyte Messages: 38 |
A mon avis, tu devrais regarder le code du début de HoU. En effet, au démarrage de HoU tu te fais dépouiller de tous tes items et tu retrouves ceux-ci dans un coffre bien plus tard.
Sinon, tu reprends un script qui sert à vider l'inventaire d'un joueur (y'en a plein) et tu remplace les DestroyObject() par des ActionGiveItem(). Sinon, j'essairai peut être de faire quelque chose à base de CreateItemOnObject(). |
Revenir en haut | |
S@ntoS Seigneur Messages: 169 Localisation: J'aimerais bien le savoir. |
Salut,
Le script en question, le voici. Il a l'air beaucoup moins simple que tu semblais le penser. Même si je distingue les lignes qui pourraient m'être utiles, beaucoup de subtilités m'échappent. Pour un newb tel que moi, cela représente plusieurs heures de boulot pour un résultat qui, j'en suis sur, sera bancal. – Je dis ça par expérience. Si quelqu'un pouvait m'aider. Merci. @+.f€r. NWScript : //://////////////////////////////////////////////
Le code a colorer syntaxiquement est trop long (plus de 10240 caractères) et risque de ne pas s'afficher du tout. Vous pouvez le voir en version colorée ici.//:: Name //:: Copyright (c) 2001 Bioware Corp. //:///////////////////////////////////////////// /* If this is the first time the client is entering this area - he's coming from Cutscene 1 - so spawn in the assassin in the First room. */ //:///////////////////////////////////////////// //:: Created By: Keith Warner //:: Created On: Oct 30/02 //:///////////////////////////////////////////// // Updated July 2/03 - Several changes to script to accomodate low level // characters. Further comments in body of this script. //UPDATED JAN 6/03 - Changed to - On entry of hero PC - strip of all equipment. // Place equipment in the chest at the foot of the PCs bed. Create key for // chest on the PC and initiate dialog with prologue object //UPDATED June 20/03 While removing all the item, total the value of their equipment. //If they have less than 15000 gp in items, spawn a longsword +3 //(or quarterstaff +3 if wizard, monk, druid) and a ring of protection +3. //UPDATE AUGUST 11/03 - Now the plan is to have the drow 'thief' steal the chest with //the PCs stuff (which may turn up later on)..So store all the stuff in a box in the //Random Treasure area.. Spawn in the assassin when the area is first entered.. //:////////////////////////////////////////////// //:: ExcludeItem //:: Copyright (c) 2003 Bioware Corp. //:///////////////////////////////////////////// /* A function just to return true if this item should not be allowed when the player first enters the game. */ //:///////////////////////////////////////////// //:: Created By: Brent //:: Created On: June 2003 //:///////////////////////////////////////////// int ExcludeItem(object oGear) { string sTag = GetTag(oGear); // * don't filter Tynan out. Is an easter egg in c2 if (sTag == "PortableDoor" || sTag == "x0_spellstaff" || sTag == "x0_powerstone" ||sTag == "golemmakerkey" || sTag == "Library_Pen" || sTag == "Library_Inkwell" || sTag=="q1monkitem" || sTag == "q1sorcereritem" || sTag == "q1rangeritem" || sTag == "q1clericitem" || sTag == "q1rogueitem" || sTag == "q1barbitem" || sTag == "q1paladinitem" || sTag == "q1barditem" || sTag == "q1mageitem" || sTag == "q1fighteritem" || sTag == "q1druiditem" || sTag == "q1footstagtrophy" || sTag == "TempleRites" || sTag == "x1dragontooth" || sTag == "x1mask" || sTag == "xp1_pcjournal" || sTag == "ShadowGem" || sTag == "NW_MSMLMISC23" || sTag == "NW_MSMLMISC10" || sTag == "NW_MSMLMISC19" || sTag == "NW_MSMISC17" || sTag == "Q2_KEY_PUZZLE_ROOM" || sTag == "q3_promissary" || sTag == "Q2_PROTECTIVE_HELMET" ) { return TRUE; } return FALSE; } void DeMagnitizePC(object oPC) { effect eEffect = GetFirstEffect(oPC); while (GetIsEffectValid(eEffect) == TRUE) { RemoveEffect(oPC, eEffect); eEffect = GetNextEffect(oPC); } } void main() { //Level character up to 15, if character is below level 15 object oPC = GetEnteringObject(); if (GetIsPC(oPC) == FALSE) return; // * Oct 1 // * Brent // * // * If started with a low level character, saved, then // * reloaded, restart the "level me up" dialog // * // * LOGIC: If in the start "second floor room" // * and still I am not level 15, then try starting the conversation again string sArea = GetTag(GetArea(oPC)); int nHitDie = GetHitDice(oPC); // SendMessageToPC(oPC, sArea); // SendMessageToPC(oPC, IntToString(nHitDie)); if (sArea == "q2a_yprooms" && nHitDie <12) { //variable for rest message for the room door SetLocalInt(oPC, "X2_Q2ARestMessage", 1); AssignCommand(oPC, ClearAllActions()); DelayCommand(2.0, AssignCommand(oPC, ActionStartConversation(OBJECT_SELF, "bk_levelup", FALSE, FALSE))); return; } // ************************* // * If less than level 12 // * then entering this area // * as a newbie. Should not // * get the assassin until the // * next day // * BRENT // ************************* /* BRENT MODIFICATION For low level characters this conversation will not play the first time */ if (GetHitDice(oPC) < 12) { return; // * This will be ran when they return from the other cutscene } //Check to make sure enterer is a PC and assassin has never spawned (and that the PC has been to the cutscene and hasn't just saved and loaded in the rooms) if (GetIsPC(oPC) && (GetLocalInt(GetModule(), "nAssassin") != 1 || GetLocalInt(GetModule(), "INIT_IMMOBILIZE_REMOVED") == 0) && GetLocalInt(oPC, "X2_Q2ASpawnTheAssassin") == 1) { if(GetLocalInt(GetModule(), "INIT_IMMOBILIZE_REMOVED") == 0 && GetLocalInt(GetModule(), "nAssassin") == 1) { object oDialog = GetObjectByTag("q2aprologue"); DelayCommand(1.5, AssignCommand(oDialog, ActionStartConversation(oPC, "pre_awake1"))); return; } //variable for rest message for the room door SetLocalInt(oPC, "X2_Q2ARestMessage", 0); BlackScreen(oPC); DeMagnitizePC(oPC); // * September 2003: Disable relic of reaper from working // * until this variable is turned off (after the rogue is dead) SetLocalInt(GetModule(), "x2_g_disabled", 10); AddJournalQuestEntry("portalstone", 20, oPC, FALSE); object oContainer = GetObjectByTag("x2_chapter1pcequip"); //NEW CONTAINER - // This container is in the final area of Chapter 1! // * pick up any equipment lying on the ground // * Thanks Mr. Cheater! object oArea = OBJECT_INVALID; object oItem = GetFirstObjectInArea(oArea); while (GetIsObjectValid(oItem) == TRUE) { if (GetObjectType(oItem) == OBJECT_TYPE_ITEM) { CopyItem(oItem, oContainer); SetPlotFlag(oItem, FALSE); DestroyObject(oItem, 0.1); } oItem = GetNextObjectInArea(oArea); } //if this is the main PC - who has had the dream if (GetLocalInt(oPC, "nPCNumber") == 1) { //if this is the case, strip PC of all equipment, place //it on the weapons rack ("q2a_pc_equip" and //spawn in the assassin ("q2adrowassassin") // Removing PC's equipment. object oGear = GetItemInSlot(INVENTORY_SLOT_ARMS, oPC); object oGear2; //object oContainer = GetObjectByTag("q2a_pc_equip");//OLD CONTAINER - IN PC START ROOM int nGold = 0; if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } oGear = GetItemInSlot(INVENTORY_SLOT_BELT, oPC); if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } oGear = GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC); if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } oGear = GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC); if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } oGear = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC); if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } oGear = GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC); if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } oGear = GetItemInSlot(INVENTORY_SLOT_HEAD, oPC); if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } oGear = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC); if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } oGear = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC); if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } oGear = GetItemInSlot(INVENTORY_SLOT_NECK, oPC); if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } oGear = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC); if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } oGear = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC); if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } oGear = GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC); if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } oGear = GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC); if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } oGear = GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC); if(GetIsObjectValid(oGear)) { nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); } //Empty all items from the PCs inventory //Destroy any XP1 specific items //UPDATE 08/11/03 - Keep XP1 items for now oGear = GetFirstItemInInventory(oPC); while (oGear != OBJECT_INVALID) { //Don't destroy the reaper stone, rogue stone or Deekin's book //if (GetTag(oGear) != "x2_p_reaper" && GetTag(oGear) != "x2_p_rogue" && GetTag(oGear) != "bookoflegends") //{ nGold = nGold + GetGoldPieceValue(oGear); oGear2 = CopyItem(oGear, oContainer); SetPlotFlag(oGear, FALSE); DestroyObject(oGear); oGear = GetNextItemInInventory(oPC); } //Get Rid of Gold TakeGoldFromCreature(GetGold(oPC), oPC, TRUE); // ****************************** // * EXTRA ITEM SPAWNING // ****************************** //If they have less than 15000 gp in items, spawn a longsword +3 //(or quarterstaff +3 if wizard, monk, druid) and a ring of protection +3. if (nGold < 15000) { if (GetLevelByClass(CLASS_TYPE_WIZARD, oPC) > 5 || GetLevelByClass(CLASS_TYPE_MONK, oPC) > 5 || GetLevelByClass(CLASS_TYPE_DRUID, oPC) > 5) { //create quarterstaff CreateItemOnObject("nw_wdbmqs009", oContainer); } else { //create longsword CreateItemOnObject("nw_wswmls012", oContainer); } //Create ring of protection CreateItemOnObject("nw_it_mring018", oContainer); } object oDialog = GetObjectByTag("q2aprologue"); DelayCommand(1.5, AssignCommand(oDialog, ActionStartConversation(oPC, "pre_awake1"))); // * July 2 2003: Spawn in reaper stone - BK //if (GetIsObjectValid(GetItemPossessedBy(oPC, "x2_p_reaper")) == FALSE) //{ object oStone = CreateItemOnObject("x2_p_reaper", oPC); SetItemCursedFlag(oStone, TRUE); // * create one rogue stone CreateItemOnObject("x2_p_rogue", oPC, 1); //} // * Spawn Deekin's book on the player CreateItemOnObject("bookoflegends", oPC); } else { //destroy any portal stones held by other players if (GetIsObjectValid(GetItemPossessedBy(oPC, "x2_p_reaper")) == TRUE) { object oStone = GetItemPossessedBy(oPC, "x2_p_reaper"); DestroyObject(oStone); } } //Do the following only the first time the area is entered if (GetLocalInt(OBJECT_SELF, "nSaved") == 1) return; SetLocalInt(OBJECT_SELF, "nSaved", 1); DoSinglePlayerAutoSave(); object oKiller = CreateObject(OBJECT_TYPE_CREATURE, "q2adrowassassin", GetLocation(GetWaypointByTag("wp_q2a_assassin"))); object oChest = GetObjectByTag("q2a_pc_equip"); AssignCommand(oKiller, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.0, 60.0)); SetLocalInt(GetModule(), "nAssassin", 1); // * Spawn and add the new complementary dagger object oDagger = CreateItemOnObject("x2_newdag", oPC); AssignCommand(oPC, ActionEquipItem(oDagger, INVENTORY_SLOT_RIGHTHAND)); // Added by: Brad Prince. This was done to cover the naked PC bumping that // happened before drow assassin. Looked unpolished. DelayCommand(1.0, FadeFromBlack(oPC, FADE_SPEED_MEDIUM)); } } _________________ 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 |
CreateItemOnObject risque de dépersonnaliser des items conçus par l'artisanat.
Il a donc la possibilité de passer soit par le ActionGiveItem, soit par le couple de fonctions : CopyObject // DestroyObject. La première possibilité est la plus intéressante à mon avis. _________________ Atha, Artisan Scripteur. meet the most beautiful woman in the world |
Revenir en haut | |
Athanagorn Acolyte Messages: 38 |
Bon, le script "officiel" est à base de CopyObject/DestroyObject.
On va essayer de faire quelque chose avec ActionGiveItem() NWScript :
void main() { object oPC = GetEnteringObject(); if(FALSE==GetIsPC(oPC)) return; // on va pas s'attarder si ce n'est pas un PJ object oCoffre = GetObjectByTag("tag_du_coffre"); object oItem = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItem)) { ActionGiveItem(oItem, oCoffre); oItem = GetNextItemInInventory(oPC); } int nInventorySlot; for(nInventorySlot = 0; nInventorySlot < NUM_INVENTORY_SLOTS; nInventorySlot++) { oItem = GetItemInSlot(nInventorySlot, oPC); if(GetIsObjectValid(oItem)) ActionGiveItem(oItem, oCoffre); } AssignCommand(oCoffre, TakeGoldFromCreature(GetGold(oPC), oPC)); } Edit: J'avais oublié l'or. Je le rajoute. Dernière édition par Athanagorn le 18/01/2005 13:45:02; édité 1 fois
|
Revenir en haut | |
S@ntoS Seigneur Messages: 169 Localisation: J'aimerais bien le savoir. |
Apparemment, le script de NWN est bien passé par les fonctions « Copy » et « Destroy Items ». Mais certaines choses, m'échappent, entre autre la gestion de l'or.
_________________ 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 | |
S@ntoS Seigneur Messages: 169 Localisation: J'aimerais bien le savoir. |
J'ai testé ton script Athanagorn. Il ne semble pas fonctionner. A préciser que le coffre en question est bien un objet « actif » et possédant un « inventaire ».
En tous cas, merci. _________________ 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 | |
Athanagorn Acolyte Messages: 38 |
Dans ce cas, tu peux essayer ceci:
NWScript : void TransfertItem(object oItem, object oCoffre) { CopyItem(oItem, oCoffre, TRUE); DestroyObject(oItem); } void main() { object oPC = GetEnteringObject(); if(FALSE==GetIsPC(oPC)) return; // on va pas s'attarder si ce n'est pas un PJ object oCoffre = GetObjectByTag("tag_du_coffre"); object oItem = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItem)) { TransfertItem(oItem, oCoffre); oItem = GetNextItemInInventory(oPC); } int nInventorySlot; for(nInventorySlot = 0; nInventorySlot < NUM_INVENTORY_SLOTS; nInventorySlot++) { oItem = GetItemInSlot(nInventorySlot, oPC); if(GetIsObjectValid(oItem)) TransfertItem(oItem, oCoffre); } AssignCommand(oCoffre, TakeGoldFromCreature(GetGold(oPC), oPC)); } |
Revenir en haut | |
S@ntoS Seigneur Messages: 169 Localisation: J'aimerais bien le savoir. |
Félicitations Athanagorn,
cette fois-ci le script fonctionne à merveille. J'ai partiellement compris ce que tu as fait en introduisant les 5 premières lignes du script. C'est malin. Très astucieux également la fonction pour prendre l'or du PJ. C'est tellement simple que je n'y avais pas pensé – et pourtant c'est de mon niveau. Voici le script dans son entier. Encore mille mercis. @+. f€r NWScript : void TransfertItem(object oItem, object oCoffre) { CopyItem(oItem, oCoffre, TRUE); DestroyObject(oItem); } void main() { object oPC = GetEnteringObject(); if(FALSE==GetIsPC(oPC)) return; // on va pas s'attarder si ce n'est pas un PJ object oCoffre = GetObjectByTag("oCoffre_PJ"); object oItem = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItem)) { TransfertItem(oItem, oCoffre); oItem = GetNextItemInInventory(oPC); } int nInventorySlot; for(nInventorySlot = 0; nInventorySlot < NUM_INVENTORY_SLOTS; nInventorySlot++) { oItem = GetItemInSlot(nInventorySlot, oPC); if(GetIsObjectValid(oItem)) TransfertItem(oItem, oCoffre); } AssignCommand(oCoffre, TakeGoldFromCreature(GetGold(oPC), oPC)); { int lvl = 1; int xp = (lvl*(lvl-1))*500; SetXP(oPC, xp); } } _________________ 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 | |
Eldorane Héros Messages: 298 Localisation: Moselle |
Je prends !!!
Pourrait-on l'adapter a plusieurs PJ ? _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
Comment ça plusieurs PJ ?
Là il le fait déjà à plusieurs PJ si t'y va par là puisqu'il est à mettre sur un trigger.Donc tous ceux qui rentrent dans le trigger en question lancent le script |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
rah double post à la noix.Désolé les modéro voilà du boulot pour vous
|
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
Bin moi je comptais le mettre à la fin d'un dialogue (evidement )
Voici la modif que j'ai réalisée, mais j'ai pas pu la tester en multi : NWScript : // Recupere le matos du PJ et le met dans un coffre void TransfertItem(object oItem, object oCoffre) { CopyItem(oItem, oCoffre, TRUE); DestroyObject(oItem); } void main() { object oPC = GetFirstObjectInArea(); if(FALSE==GetIsPC(oPC)) return; // on va pas s'attarder si ce n'est pas un PJ object oCoffre = GetObjectByTag("oCoffre_PJ"); while(GetIsObjectValid(oPC)==TRUE) { if(GetIsPC(oPC)) // et si cet objet est un joueur { object oItem = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItem)) { TransfertItem(oItem, oCoffre); oItem = GetNextItemInInventory(oPC); } int nInventorySlot; for(nInventorySlot = 0; nInventorySlot < NUM_INVENTORY_SLOTS; nInventorySlot++) { oItem = GetItemInSlot(nInventorySlot, oPC); if(GetIsObjectValid(oItem)) TransfertItem(oItem, oCoffre); } AssignCommand(oCoffre, TakeGoldFromCreature(GetGold(oPC), oPC)); { oPC = GetNextObjectInArea(); } } } } _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
NWScript :
object oPC = GetFirstObjectInArea(); if(FALSE==GetIsPC(oPC)) return; // on va pas s'attarder si ce n'est pas un PJ Premier soucis (et de taille ) Tu prend le premier objet sur ta map, d'accord, ce qui coince c'est que si c'est pas un PJ, hop tu quittes le script la ligne if(FALSE machin chouette, on peut la retirer, elle ne sert pas. 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. Là il faudrait mettre NWScript : ou alors un 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. 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. Ensuite j'ai l'impression qu'il y a un soucis d'accolades. Citation : AssignCommand(oCoffre, TakeGoldFromCreature(GetGold(oPC), oPC));
je le verrai bien devenir un truc du genre :
{ oPC = GetNextObjectInArea();// Puis on passe à l'objet suivant dans la zone... } } } } Citation : AssignCommand(oCoffre, TakeGoldFromCreature(GetGold(oPC), oPC));
Pour l'instant ce sont les seules choses qui me choquent bon courage} oPC = GetNextObjectInArea();// Puis on passe à l'objet suivant dans la zone... } } |
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
Voici ce que j'ai fais maintenant :
NWScript :
// Recupere le matos du PJ et le met dans un coffre void TransfertItem(object oItem, object oCoffre) { CopyItem(oItem, oCoffre, TRUE); DestroyObject(oItem); } void main() { object oPC = GetFirstObjectInArea(); object oCoffre = GetObjectByTag("oCoffre_PJ"); while(oPC!=OBJECT_INVALID) { //while(GetIsObjectValid(oPC)= =TRUE) { if(GetIsPC(oPC)) // et si cet objet est un joueur { object oItem = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItem)) { TransfertItem(oItem, oCoffre); oItem = GetNextItemInInventory(oPC); } int nInventorySlot; for(nInventorySlot = 0; nInventorySlot < NUM_INVENTORY_SLOTS; nInventorySlot++) { oItem = GetItemInSlot(nInventorySlot, oPC); if(GetIsObjectValid(oItem)) TransfertItem(oItem, oCoffre); } AssignCommand(oCoffre, TakeGoldFromCreature(GetGold(oPC), oPC)); { oPC = GetNextObjectInArea(); } } } } Si j'enlève les 2 } de la fin, il met une erreur. Le script se compile mais ne parche pas en jeu : je reçoit l'erreur suivante en jeu : script *si-dessus* OID80000DB7 ; tag Falk3 ; ERREUR TOO MANY INSTRUCTION _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
Le script est placé dans quel évènement ?
Sinon j'insiste sur le fait qu'il y a un soucis d'accolades, bon je les ai pas placé où il faut ptete, mais en tout cas là comme c'est scripté ça ira jamais pour plusieurs joueurs. Citation : void main()
Je comprend pas pourquoi il ne marcherait pas, tout dépend d'où on le met { object oPC = GetFirstObjectInArea(); object oCoffre = GetObjectByTag("oCoffre_PJ"); while(oPC!=OBJECT_INVALID) { if(GetIsPC(oPC)) // et si cet objet est un joueur { // Objets non équipés object oItem = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItem)) { TransfertItem(oItem, oCoffre); oItem = GetNextItemInInventory(oPC); } // Items équipés int nInventorySlot; for(nInventorySlot = 0; nInventorySlot < NUM_INVENTORY_SLOTS; nInventorySlot++) { oItem = GetItemInSlot(nInventorySlot, oPC); if(GetIsObjectValid(oItem)) TransfertItem(oItem, oCoffre); } // Et enfin transferrons l'or: C'est le coffre qui se sert lui-même AssignCommand(oCoffre, TakeGoldFromCreature(GetGold(oPC), oPC)); } // là on sort du if, car même si ce n'est pas un PJ on doit prendre l'objet suivant oPC = GetNextObjectInArea();// Puis on passe à l'objet suivant dans la zone... } //là on ferme le while } //là on ferme le main |
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
Marche pas : il me met une ERREUR : UNDEFINED IDENTIFIER (TransfertItem) pour la ligne TransfertItem(oItem, oCoffre); ...
J'ai placé ce script dans une phrase d'un dialogue. (je pourrais le mettre dans le ONEnter de la zone, mais à chaque fois que les PJ vont y entrer, ils seront dépouillés ! Sinon j'ai pensé à un truc : pour mon module, il ne faudrait pas que les PJ se retrouvent tout nus ! Il faudrai qu'ils conservent au moins leurs vêtements ! _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
euh, t'as bien remis la définition de la fonction transfert item au dessus de ce que je viens d'écrire ? Je l'ai retiré pour que ce soit plus visible mais il faut bien sur qu'elle fasse partie du script.
Pour ne pas les mettre nus : NWScript : for(nInventorySlot = 0; nInventorySlot < NUM_INVENTORY_SLOTS; nInventorySlot++) { if (nInventorySlot!=INVENTORY_SLOT_CHEST) { oItem = GetItemInSlot(nInventorySlot, oPC); if(GetIsObjectValid(oItem)) TransfertItem(oItem, oCoffre); } } |
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
Voici le résultat :
NWScript :
void TransfertItem(object oItem, object oCoffre) { CopyItem(oItem, oCoffre, TRUE); DestroyObject(oItem); } void main() { object oPC = GetFirstObjectInArea(); object oCoffre = GetObjectByTag("oCoffre_PJ"); while(oPC!=OBJECT_INVALID) { if(GetIsPC(oPC)) // et si cet objet est un joueur { object oItem = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItem)) { TransfertItem(oItem, oCoffre); oItem = GetNextItemInInventory(oPC); } int nInventorySlot; for(nInventorySlot = 0; nInventorySlot < NUM_INVENTORY_SLOTS; nInventorySlot++) { if (nInventorySlot!=INVENTORY_SLOT_CHEST) { oItem = GetItemInSlot(nInventorySlot, oPC); if(GetIsObjectValid(oItem)) TransfertItem(oItem, oCoffre); } } AssignCommand(oCoffre, TakeGoldFromCreature(GetGold(oPC), oPC)); } oPC = GetNextObjectInArea(); } } Je test ça ce soir !! _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
Alors alors ? ça fonctionne ou pas ?
|
Revenir en haut | |
Eldorane Héros Messages: 298 Localisation: Moselle |
En solo ça fonctionne ! Normalement ce soit nous faisons un test multi ; je te tiens au courant
_________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
A la place de prendre GetFirst/NextObjectInArea il vaut mieu prendre GetFirst/NextPC et tester le tag de la zone car en général on a moins de pj dans le mod que de plaçables dans la zone. (On m'avait fait la remarque il y a peu de temps )
_________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
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