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 15:03:33


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Attention ! Vous êtes en train de lire un message hors de son contexte. Veuillez lire le sujet Prob avec un respawn en entier avant de répondre à ce message.
PsyCalimero
Ecuyer
Inscrit le: 17 Jan 2006
Messages: 44
Répondre en citant
Posté le : 22/03/2006 06:53:53 Sujet du message : Prob avec un respawn

Bonjour tout le monde, j'ai visité le forum et j'y ai trouvé des instruction pour le script anti deco reco respawn... Seulement voilà, dans le OnRespawn, le personnage ne perd pas son objet (tag cartemort)... Pire, il en obtient un autre...
De l'aide svp:D j'aimerai que tout objet de tag cartemort soit supprimé de l'inventaire au respawn ! merci bcp !
Voici mon script
NWScript :
#include "nw_i0_plot"
void ApplyPenalty(object oDead)
{


    int Mort;
    Mort = 0;

    SetLocalInt(oDead, "campe_mort", Mort);

    int nXP = GetXP(oDead);
    int nPenalty;
    int nHD = GetHitDice(oDead);
    if (nHD < 11)
    {
        nPenalty = 20 * GetHitDice(oDead);
    }
    if ((nHD >= 11) && (nHD < 16))
    {
        nPenalty = 40 * GetHitDice(oDead);
    }
    if (nHD >= 16)
    {
        nPenalty = 80 * GetHitDice(oDead);
    }

    // * You can not lose a level with this respawning
    int nMin = ((nHD * (nHD - 1)) / 2) * 1000;

    int nNewXP = nXP - nPenalty;
    if (nNewXP < nMin)
      nNewXP = nMin;
    SetXP(oDead, nNewXP);

    int nGoldToTake;

    if (nHD < 11 )
    {
        nGoldToTake =    FloatToInt(0.05 * GetGold(oDead));
    }
    if (( nHD >= 11) && (nHD < 16))
    {
        nGoldToTake =    FloatToInt(0.10 * GetGold(oDead));
    }
    if (nHD >= 16)
    {
        nGoldToTake =    FloatToInt(0.20 * GetGold(oDead));
    }

    /*
    object oGear;
    int Pif;
    if (nHD < 10)
    {
        Pif = 20;
    }
    if ((nHD >= 10) && (nHD < 16))
    {
        Pif = Random(75);
    }
    if (nHD > 16)
    {
        Pif = Random(50);
    }

            if (Pif == 0)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_ARMS, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 1)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_ARROWS, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 2)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_BELT, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 3)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_BOLTS, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 4)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_BOOTS, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 5)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_BULLETS, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 6)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 7)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_CHEST, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == Cool
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_CLOAK, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 9)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 10)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 11)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 12)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_HEAD, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 13)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 14)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 15)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_NECK, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 16)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
            if (Pif == 17)
            {
                oGear = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oDead);
                if(GetIsObjectValid(oGear))
                    DestroyObject(oGear);
            }
    */
    // * a cap of 10 000gp taken from you
    //if (nGoldToTake > 10000)
    //{
    //    nGoldToTake = 10000;
    //}
    AssignCommand(oDead, TakeGoldFromCreature(nGoldToTake, oDead, TRUE));
    DelayCommand(4.0, FloatingTextStrRefOnCreature(58299, oDead, FALSE));
    DelayCommand(4.8, FloatingTextStrRefOnCreature(58300, oDead, FALSE));

}

///////////////////////////////////////////////////////////////////////
// this function resets variabls and clears the arenas in the fighter
// 'gauntlet' subplot in chapter one
///////////////////////////////////////////////////////////////////////

void ClearArena(object oPC,string sArena)
{
    if(sArena == "Map_M1S4C")
    {
        DestroyObject(GetObjectByTag("M1S04CHRUSK02"));
        DestroyObject(GetObjectByTag("M1S4CBeast"));
        SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4HruskDef",0);
    }
    else if(sArena == "Map_M1S4D")
    {
        DestroyObject(GetObjectByTag("M1S04CFASHI02"));
        DestroyObject(GetObjectByTag("M1S4DBeast"));
        SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4FashiDef",0);
        CreateItemOnObject("M1S04IBADGELVL01",oPC);
    }
    else if(sArena == "Map_M1S4E")
    {
        DestroyObject(GetObjectByTag("M1S04CAGAR02"));
        DestroyObject(GetObjectByTag("M1S4EBeast"));
        SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4AgarDef",0);
        CreateItemOnObject("M1S04IBADGELVL02",oPC);
    }
    else if(sArena == "Map_M1S4F")
    {
        DestroyObject(GetObjectByTag("M1S04CCLAUDUS02"));
        DestroyObject(GetObjectByTag("M1S4FBeast",0));
        DestroyObject(GetObjectByTag("M1S4FBeast",1));
        SetLocalInt(GetObjectByTag(sArena),"NW_A_M1S4ClaudusDef",0);
        CreateItemOnObject("M1S04IBADGELVL03",oPC);
    }
    SetLocalInt(oPC,"NW_L_M1S4Won",FALSE);
    SetLocalInt(GetModule(),"NW_G_" + sArena + "_Occupied",FALSE);
}

//////////////////////////////////////////////////////////////////////////////


void main()
{

        object oPC = GetLastRespawnButtonPresser();


    object oRespawner = GetLastRespawnButtonPresser();
    ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawner);
    ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner);
    RemoveEffects(oRespawner);

    //* Return PC to temple



    string sDestTag =  "NW_DEATH_TEMPLE";
    string sArea = GetTag(GetArea(oRespawner));
    /*
      CHAPTER 1 SPECIAL CASE
    */
    if (sArea == "MAP_M1S3B")
    {
        sDestTag = "M1_WIZSPAWN";
    }
    else
    if (sArea == "Map_M1S4E" || sArea == "Map_M1S4C" || sArea == "Map_M1S4D" || sArea == "Map_M1S4F")
    {
        sDestTag = "M1_FIGSPAWN";
        ClearArena(oRespawner,sArea);
    }
    else
    /*
      CHAPTER 2 SPECIAL CASE
    */
/*
    if (sArea == "MAP_M2Q2F2" && GetDistanceBetweenLocations(GetLocation(GetObjectByTag("M2Q2F2_M2Q2G")), GetLocation(oRespawner)) < 5.0 && GetLocalInt(GetModule(),"NW_M2Q2E_WoodsFreed") == 0)
    {

      sDestTag = "WP_M2Q2GtoM2Q2F";
    }
    else
*/
    // * Druid Match
    if (sArea == "MAP_M2Q2E2")
    {
      sDestTag = "WP_M2Q2E_ENDDCC";
      DestroyObject(GetObjectByTag("M2Q2EWELCARFT"));
      DestroyObject(GetObjectByTag("M2Q2EHENNAFT"));
      DestroyObject(GetObjectByTag("M2Q2EJANKENFT"));
      DestroyObject(GetObjectByTag("M2Q2EELGARFT"));
      // * June 2002: Destroy pets as well
      DestroyObject(GetObjectByTag("M2Q2EWELCARFTPET"));
        DestroyObject(GetObjectByTag("M2Q2EHENNAFTPET"));
        DestroyObject(GetObjectByTag("M2Q2EJANKENFTPET"));
        DestroyObject(GetObjectByTag("M2Q2EELGARFTPET"));


      SetLocalInt(GetObjectByTag("M2Q2EJAER"),"NW_M2Q2E_LFIGHT",FALSE);
    }
    /*
      CHAPTER 3 SPECIAL CASE
    */
    else
    // * time travel dungeon past - Dungeon
    if (sArea == "M3Q2G")
    {
        sDestTag = "WP_ALTERNATE_SPWN";
    }
    // * time travel dungeon past - Grove
    else
    if (sArea == "M3Q2I")
    {
        sDestTag = "WP_ALTERNATE_SPWN";
    }

    //***** Respawn dasn l'arene sans penalites ! *****
    if (sArea == "Arene")
    {
        sDestTag = "NW_DEATH_ARENE";
    }
    if (sArea == "ZONEHRP")
    {
        sDestTag = "NW_DEATH_HRP";
    }

    if (GetIsObjectValid(GetObjectByTag(sDestTag)))
    {

        if (sDestTag == "NW_DEATH_TEMPLE")
        {
            object oPriest = GetObjectByTag("NW_DEATH_CLERIC");
            //SetLocalInt(oPriest, "NW_L_SAYONELINER", 10);

            //AssignCommand(oPriest, DelayCommand(3.0,ActionStartConversation(oRespawner)));
            AssignCommand(oPriest, DelayCommand(2.1, PlayVoiceChat(VOICE_CHAT_TALKTOME, oPriest)));

            SetLocalLocation(oRespawner, "NW_L_I_DIED_HERE", GetLocation(GetLastRespawnButtonPresser()));
            SetLocalInt(oRespawner, "NW_L_I_DIED", 1);
            SetLocalObject(oPriest, "NW_L_LASTDIED", GetLastRespawnButtonPresser());
            // * April 2002: Moved penalty here, only when going back to the death temple
            ApplyPenalty(oRespawner);
        }
        object oSpawnPoint = GetObjectByTag(sDestTag);
        AssignCommand(oRespawner,JumpToLocation(GetLocation(oSpawnPoint)));
        // * mak
    }
    else
    {
    object oPC = GetLastRespawnButtonPresser();

if (!GetIsPC(oPC)) return;

ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPC);

ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPC)), oPC);

RemoveEffects(oPC);

object oCarte = GetItemPossessedBy(oRespawner, "cartemort");
DestroyObject(oCarte);
        object oItemToTake;
        oItemToTake = GetItemPossessedBy(GetLastRespawnButtonPresser(), "cartemort");
        if(GetIsObjectValid(oItemToTake) != 0)
        DestroyObject(oItemToTake);
}
}

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.


Voilà c'est le script, un peu long, mais il n'y a pas une enorme retouche a faire je crois merci ^^
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé
 
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 35.017ms