La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 22:30:10


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
S@ntoS
Seigneur
Inscrit le: 12 Déc 2004
Messages: 169
Localisation: J'aimerais bien le savoir.
Répondre en citant
Posté le : 17/01/2005 23:21:39 Sujet du message : Equipement PJ téléporté dans coffre.

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. Surprised
_________________
L'oiseau vole, le serpent rampe et l'homme... heu, j'en sais rien. Surprised
Le RP, cé vrémant tro z'injuste !Calimero
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Athanagorn
Acolyte
Inscrit le: 12 Déc 2004
Messages: 38
Répondre en citant
Posté le : 18/01/2005 09:50:52 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
S@ntoS
Seigneur
Inscrit le: 12 Déc 2004
Messages: 169
Localisation: J'aimerais bien le savoir.
Répondre en citant
Posté le : 18/01/2005 11:20:10 Sujet du message :

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.Confused

Si quelqu'un pouvait m'aider. Merci.
@+.f€r. Surprised

NWScript :
//:Confused//////////////////////////////////////////////
//:: Name
//:: Copyright (c) 2001 Bioware Corp.
//:Confused/////////////////////////////////////////////
/*
    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.
*/
//:Confused/////////////////////////////////////////////
//:: Created By:  Keith Warner
//:: Created On:  Oct 30/02
//:Confused/////////////////////////////////////////////
// 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..

//:Confused//////////////////////////////////////////////
//:: ExcludeItem
//:: Copyright (c) 2003 Bioware Corp.
//:Confused/////////////////////////////////////////////
/*
    A function just to return true if this
    item should not be allowed when the player first enters
    the game.
*/
//:Confused/////////////////////////////////////////////
//:: Created By: Brent
//:: Created On: June 2003
//:Confused/////////////////////////////////////////////

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));
    }


}
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.

_________________
L'oiseau vole, le serpent rampe et l'homme... heu, j'en sais rien. Surprised
Le RP, cé vrémant tro z'injuste !Calimero
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Athanor salamander
Légende vivante
Inscrit le: 01 Avr 2003
Messages: 306
Localisation: Ecole du Script
Répondre en citant
Posté le : 18/01/2005 11:21:46 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Athanagorn
Acolyte
Inscrit le: 12 Déc 2004
Messages: 38
Répondre en citant
Posté le : 18/01/2005 13:24:15 Sujet du message :

Bon, le script "officiel" est à base de CopyObject/DestroyObject.
On va essayer de faire quelque chose avec ActionGiveItem() Wink

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));
}
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.


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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
S@ntoS
Seigneur
Inscrit le: 12 Déc 2004
Messages: 169
Localisation: J'aimerais bien le savoir.
Répondre en citant
Posté le : 18/01/2005 13:26:33 Sujet du message :

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.

Surprised
_________________
L'oiseau vole, le serpent rampe et l'homme... heu, j'en sais rien. Surprised
Le RP, cé vrémant tro z'injuste !Calimero
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
S@ntoS
Seigneur
Inscrit le: 12 Déc 2004
Messages: 169
Localisation: J'aimerais bien le savoir.
Répondre en citant
Posté le : 18/01/2005 13:41:13 Sujet du message :

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. Surprised
_________________
L'oiseau vole, le serpent rampe et l'homme... heu, j'en sais rien. Surprised
Le RP, cé vrémant tro z'injuste !Calimero
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Athanagorn
Acolyte
Inscrit le: 12 Déc 2004
Messages: 38
Répondre en citant
Posté le : 18/01/2005 13:50:47 Sujet du message :

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));
}
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
S@ntoS
Seigneur
Inscrit le: 12 Déc 2004
Messages: 169
Localisation: J'aimerais bien le savoir.
Répondre en citant
Posté le : 18/01/2005 14:36:18 Sujet du message :

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 Surprised

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);

}
}
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'oiseau vole, le serpent rampe et l'homme... heu, j'en sais rien. Surprised
Le RP, cé vrémant tro z'injuste !Calimero
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Eldorane
Héros
Inscrit le: 18 Oct 2003
Messages: 298
Localisation: Moselle
Répondre en citant
Posté le : 17/04/2005 03:17:22 Sujet du message :

Je prends !!! Very Happy

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Stan
Grand Chevalier
Inscrit le: 07 Avr 2005
Messages: 126
Répondre en citant
Posté le : 17/04/2005 11:10:17 Sujet du message :

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 Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Stan
Grand Chevalier
Inscrit le: 07 Avr 2005
Messages: 126
Répondre en citant
Posté le : 17/04/2005 11:10:38 Sujet du message :

rah double post à la noix.Désolé les modéro voilà du boulot pour vous Sad
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Eldorane
Héros
Inscrit le: 18 Oct 2003
Messages: 298
Localisation: Moselle
Répondre en citant
Posté le : 17/04/2005 12:01:10 Sujet du message :

Bin moi je comptais le mettre à la fin d'un dialogue (evidement Razz)

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();
}
}
}
}
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.

_________________

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Stan
Grand Chevalier
Inscrit le: 07 Avr 2005
Messages: 126
Répondre en citant
Posté le : 17/04/2005 16:37:47 Sujet du message :

NWScript :
object oPC = GetFirstObjectInArea();
if(FALSE==GetIsPC(oPC)) return; // on va pas s'attarder si ce n'est pas un PJ
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.



Premier soucis (et de taille Very Happy)

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 Very Happy
la ligne if(FALSE machin chouette, on peut la retirer, elle ne sert pas.


NWScript :
while(GetIsObjectValid(oPC)==TRUE) {
/* warning: 1 unclosed block {} */
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 :
while(oPC!=OBJECT_INVALID)
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.
ou alors un
NWScript :
while(GetISObjectValid(oPC))
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));
{
oPC = GetNextObjectInArea();// Puis on passe à l'objet suivant dans la zone...
}
}
}
}
je le verrai bien devenir un truc du genre :


Citation :
AssignCommand(oCoffre, TakeGoldFromCreature(GetGold(oPC), oPC));
}
oPC = GetNextObjectInArea();// Puis on passe à l'objet suivant dans la zone...
}
}
Pour l'instant ce sont les seules choses qui me choquent Very Happy bon courage
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Eldorane
Héros
Inscrit le: 18 Oct 2003
Messages: 298
Localisation: Moselle
Répondre en citant
Posté le : 18/04/2005 12:47:23 Sujet du message :

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();
}
}
}
}
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.



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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Stan
Grand Chevalier
Inscrit le: 07 Avr 2005
Messages: 126
Répondre en citant
Posté le : 18/04/2005 13:28:25 Sujet du message :

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()
{
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
Je comprend pas pourquoi il ne marcherait pas, tout dépend d'où on le met Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Eldorane
Héros
Inscrit le: 18 Oct 2003
Messages: 298
Localisation: Moselle
Répondre en citant
Posté le : 18/04/2005 14:15:53 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Stan
Grand Chevalier
Inscrit le: 07 Avr 2005
Messages: 126
Répondre en citant
Posté le : 18/04/2005 15:48:28 Sujet du message :

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);
  }
}
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Eldorane
Héros
Inscrit le: 18 Oct 2003
Messages: 298
Localisation: Moselle
Répondre en citant
Posté le : 18/04/2005 19:00:00 Sujet du message :

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();
}
}
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.


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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Stan
Grand Chevalier
Inscrit le: 07 Avr 2005
Messages: 126
Répondre en citant
Posté le : 19/04/2005 13:08:20 Sujet du message :

Alors alors ? ça fonctionne ou pas ? Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Eldorane
Héros
Inscrit le: 18 Oct 2003
Messages: 298
Localisation: Moselle
Répondre en citant
Posté le : 20/04/2005 11:23:03 Sujet du message :

En solo ça fonctionne ! Normalement ce soit nous faisons un test multi ; je te tiens au courant Smile
_________________

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ivellios
Légende vivante
Inscrit le: 25 Jan 2005
Messages: 447
Localisation: Poitiers
Répondre en citant
Posté le : 20/04/2005 11:37:45 Sujet du message :

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 Razz)
_________________
Scripts, systèmes, fonctions,... c'est par ici...
Pyjama pour castor, une vocation, un avenir sûr
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
Montrer les messages depuis :
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


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 90.007ms