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


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
kadz_OnE
Voyageur
Inscrit le: 13 Mar 2004
Messages: 1
Répondre en citant
Posté le : 13/03/2004 08:42:34 Sujet du message : [PROBLEME] Script de Mort

voila en fait j'ai telecharger le lootable corp pour pj mon probleme d'une je ne sais pas scripter .. et donc vus que j'aimerais des modification de ses scripts je demande si quelqu'un voudrais bien m'aider pour modifier cela...

voila deja les scripts

OnActivateItem
NWScript :
#include "corpse_lib"
void main()
{
    object item = GetItemActivated();
    object PC = GetItemActivator();
    object target = GetItemActivatedTarget();

    if(GetTag(item) == CorpseSkinToolsTag)
    {
        CorpseCutOffCreatureSkin(PC,target);
    }
}
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.


OnClientLeave

NWScript :
#include "corpse_lib"
void main()
{
    object pc = GetExitingObject();

    object corpse = GetLocalObject(pc,CorpsePCCorpse);

    if(GetIsObjectValid(corpse))
    {
        /*DestroyEquipment(corpse);
        AssignCommand(GetOriginalCorps e(corpse),giveBackItems(corpse ,TRUE,FALSE,TRUE));
        AssignCommand(corpse,SetIsDest royable(TRUE));*/

        string PCID = GetLocalString(pc,CorpsePCID);

        /*int size = GetStringArraySize(CorpseDeadP CLeftArray);

        SetStringInArray(CorpseDeadPCL eftArray,PCID,size);*/

        //object corpse2 = GetOriginalCorpse(corpse);
        AssignCommand(pc,giveBackItems(corpse,FALSE));
        SetLocalString_Corpse(corpse,CorpseDeadPCLeftID,PCID);

        SetLocalObject(OBJECT_SELF,PCID,corpse);
        StoreCampaignObject(CorpseCampainName,PCID,corpse,pc);
        SetCampaignLocation(CorpseCampainName,PCID+"Location",GetLocation(corpse),pc);

        DeleteLocalObject(pc,CorpsePCCorpse);
        DeleteLocalObject(corpse,CorpsePCCorpse);

    }


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


OnPlayerDeath

NWScript :
/*void ClearAllFactionMembers(object oMember, object oPlayer)
{
//    AssignCommand(oMember, SpeakString("here")) ;
    AdjustReputation(oPlayer, oMember, 100);
    SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad&qu ot;, 10); // * Player bad
    object oClear = GetFirstFactionMember(oMember, FALSE);
    while (GetIsObjectValid(oClear) == TRUE)
    {
        ClearPersonalReputation(oPlaye r, oClear);
        oClear = GetNextFactionMember(oMember, FALSE);
    }
}  */

void Raise(object oPlayer)
{
        effect eVisual = EffectVisualEffect(VFX_IMP_RESTORATION);

        effect eBad = GetFirstEffect(oPlayer);
        ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer);
        ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPlayer)), oPlayer);

        //Search for negative effects
        while(GetIsEffectValid(eBad))
        {
            if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
                GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
                GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
                GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
                GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)
                {
                    //Remove effect if it is negative.
                    RemoveEffect(oPlayer, eBad);
                }
            eBad = GetNextEffect(oPlayer);
        }
        //Fire cast spell at event for the specified target
        SignalEvent(oPlayer, EventSpellCastAt(OBJECT_SELF, SPELL_RESTORATION, FALSE));
        ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPlayer);
}

void main()
{
    object oPlayer = GetLastPlayerDied();

    // * Handle Spirit of the Wood Death



    // * make friendly to Each of the 3 common factions
    AssignCommand(oPlayer, ClearAllActions());
    // * Note: waiting for Sophia to make SetStandardFactionReptuation to clear all personal reputation
    if (GetStandardFactionReputation(STANDARD_FACTION_COMMONER, oPlayer) <= 10)
    { SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
        SetStandardFactionReputation(STANDARD_FACTION_COMMONER, 80, oPlayer);
    }
    if (GetStandardFactionReputation(STANDARD_FACTION_MERCHANT, oPlayer) <= 10)
    { SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
        SetStandardFactionReputation(STANDARD_FACTION_MERCHANT, 80, oPlayer);
    }
    if (GetStandardFactionReputation(STANDARD_FACTION_DEFENDER, oPlayer) <= 10)
    { SetLocalInt(oPlayer, "NW_G_Playerhasbeenbad", 10); // * Player bad
        SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 80, oPlayer);
    }
    effect resurrection = EffectResurrection();


    //DelayCommand(3.0,ApplyEffect ToObject(DURATION_TYPE_INSTANT ,resurrection,oPlayer));
    DelayCommand(2.5,ExecuteScript("corpse_dying",oPlayer));
    //DelayCommand(2.5, PopUpGUIPanel(oPlayer,GUI_PANE L_PLAYER_DEATH));

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





OnUnAcquierItem

NWScript :
#include "corpse_lib"
void main()
{
    object item = GetModuleItemLost();

    if( (GetTag(item) == CorpseFPickableCorpseTag || GetTag(item) == CorpseMPickableCorpseTag)
        &&!GetIsObjectValid(GetItemPossessor(item)) )
    {
        if(GetIsObjectValid(MoveCorpseTo(GetLocation(GetModuleItemLostBy()),GetPickableCorpse(item))))
        {
            DestroyObject(item);
        }
    }
    else
    {
        //Put other unAcquire events here.
    }
}
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.


Sur le placable invisible ayant le tag "CorpseInvisibleObject" et resf "deadinv"
il y a

OnClose

NWScript :
#include "corpse_lib"
void main()
{
    /*if(GetCommandable())
    { */

        object target = GetOriginalCorpse();
        object pc = GetLocalObject(target,CorpsePCCorpse);

        /*if(GetIsObjectValid(pc))
        {
            target = pc;
        }*/


        giveBackItems(target,FALSE);
/*    }
    else
    {
        SetCommandable(TRUE);
        ActionDoCommand(giveBackItems( GetOriginalCorpse(),FALSE));
        ActionDoCommand(SetCommandable (TRUE));
        SetCommandable(FALSE);
    }*/

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



Sur le placable invisible ayant le tag "CorpseInvisibleObject" et resf "deadinv"
il y a

OnClose

NWScript :
#include "corpse_lib"
void main()
{
    /*if(GetCommandable())
    { */

        object target = GetOriginalCorpse();
        object pc = GetLocalObject(target,CorpsePCCorpse);

        /*if(GetIsObjectValid(pc))
        {
            target = pc;
        }*/


        giveBackItems(target,FALSE);
/*    }
    else
    {
        SetCommandable(TRUE);
        ActionDoCommand(giveBackItems( GetOriginalCorpse(),FALSE));
        ActionDoCommand(SetCommandable (TRUE));
        SetCommandable(FALSE);
    }*/

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


OnDamaged

NWScript :
#include "corpse_lib"
void main()
{
    if(GetUseSaves())
    {
        object target = GetOriginalCorpse();

        object item = GetFirstItemInInventory();

        int dammages = GetLocalInt(OBJECT_SELF,CorpseItemLastHP) - GetCurrentHitPoints();

        SetLocalInt(OBJECT_SELF,CorpseItemLastHP,GetCurrentHitPoints());

        while(GetIsObjectValid(item))
        {
            if(!GetPlotFlag(item) && item != GetPickableCorpse())
            {
                /*WriteTimestampedLogEntry(&qu ot;Total Dammages = "+IntToString(GetTotalDam ageDealt()));
                SetDamageTaken(GetTotalDamageD ealt(),0,item);
                WriteTimestampedLogEntry(" ;Fire Dammages = "+IntToString(GetDamageDe altByType(DAMAGE_TYPE_FIRE)));
                SetDamageTaken(GetDamageDealtB yType(DAMAGE_TYPE_FIRE),1,item );
                WriteTimestampedLogEntry(" ;Acid Dammages = "+IntToString(GetDamageDe altByType(DAMAGE_TYPE_ACID)));
                SetDamageTaken(GetDamageDealtB yType(DAMAGE_TYPE_ACID),1,item );*/


                SetDamageTaken(dammages,0,item);
                ExecuteScript(SavesScriptName,item);
            }

            item = GetNextItemInInventory();
        }

        item = GetFirstItemInInventory(target);

        while(GetIsObjectValid(item))
        {
            if(!GetPlotFlag(item))
            {
                SetDamageTaken(dammages,0,item);
                ExecuteScript(SavesScriptName,item);
            }

            item = GetNextItemInInventory(target);
        }
    }
}
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.


OnDisturbed

NWScript :
#include "corpse_lib"
void main()
{
//GetLastDisturbed
int type = GetInventoryDisturbType();
object item = GetInventoryDisturbItem();

if(type == INVENTORY_DISTURB_TYPE_REMOVED || type == INVENTORY_DISTURB_TYPE_STOLEN)
{
    object linked = GetLocalObject(item,CorpseOriginalObject);

    //WriteTimestampedLogEntry(&qu ot;Corpse: object taken");

    if(GetIsObjectValid(linked))
    {
        SetPlotFlag(linked,FALSE);
        DestroyObject(linked);
        if(GetIsObjectValid(GetLocalObject(item,CorpsePCCorpse)))
        {
            DestroyObject(GetLocalObject(item,CorpsePCCorpse));
        }
        //WriteTimestampedLogEntry(&qu ot;Destroying object: " + GetTag(linked));
        DeleteLocalObject(item,CorpseOriginalObject);
    }
    else if(item == GetPickableCorpse())
    {
        object copy = MoveCorpseTo(GetLocation(GetWaypointByTag(CorpsePickableWayPoint)));

        DestroyObject(GetPickableCorpse(copy));
        SetPickableCorpse(GetPickableCorpse(),copy);
        SetPickableCorpse(copy,GetPickableCorpse());
    }
    else
    {

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


OnOpen

NWScript :
#include "corpse_lib"
int searchTest(object player)
{
    int retval = -1;

    if( !GetLocalInt(OBJECT_SELF,CorpseFindAttemptRoot+GetPCID(player)))
    {
        int dice;
        int level = GetLevelByClass(CLASS_TYPE_ROGUE,player);
        int score = 0;

        string suffix = GetPCID(player);

        SetLocalInt(OBJECT_SELF,CorpseFindAttemptRoot+suffix,TRUE);

        int attemptNumber = GetLocalInt(OBJECT_SELF,CorpseFindAttemptNumber);

        SetLocalInt(OBJECT_SELF,CorpseFindAttemptNumber,attemptNumber+1);

        SetLocalString(OBJECT_SELF,CorpseFindAttemptRoot+IntToString(attemptNumber),suffix);

        if(level > 0)
        {
            int rank = GetSkillRank(SKILL_PICK_POCKET,player);
            int try = 0;
            int success = FALSE;

            while(try < level && !success)
            {
                dice = d20();
                score = dice + rank;
                int value = score - GetLocalInt(OBJECT_SELF,CorpseFindDifficultyVarName);

                if(dice == 1)
                {
                    level--;
                }
                else if(value >= 0 || (score >= GetMaxDD(OBJECT_SELF) && getFindDifficulty() < GetMaxDD(OBJECT_SELF)) || dice == 20)
                {
                    success = TRUE;
                    retval = value;
                }

                try++;
            }

        }
        else
        {
            dice = d20();
            int rank = GetSkillRank(SKILL_SEARCH,player);
            score = dice + rank;
            int value = score - GetLocalInt(OBJECT_SELF,CorpseFindDifficultyVarName);

            if(value >=0)
            {
                retval = value;
            }
        }

        //Score is high enought to find all items
        if(score >= GetMaxDD(OBJECT_SELF) && getFindDifficulty() < GetMaxDD(OBJECT_SELF))
        {
            SetLocalInt(OBJECT_SELF,CorpseCriticalResult,3);
        }


        switch(dice)
        {

            case 1: SetLocalInt(OBJECT_SELF,CorpseCriticalResult,2);
                        break;
            case 20: SetLocalInt(OBJECT_SELF,CorpseCriticalResult,1);
                        break;
            default: //SetLocalInt(OBJECT_SELF,Corp seCriticalResult,0);
                        break;
        }

        //WriteTimestampedLogEntry(&qu ot;searchTest dice value = "+IntToString(dice)); //debug
        //WriteTimestampedLogEntry(&qu ot;searchTest score value = "+IntToString(score)); //debug

    }
    //WriteTimestampedLogEntry(&qu ot;searchTest return value = "+IntToString(retval)); //debug
    //WriteTimestampedLogEntry(&qu ot;searchTest DD value = "+IntToString(getFindDiff iculty())); //debug

    return retval;
}
void main()
{

    if(GetArea(OBJECT_SELF) != GetArea(GetWaypointByTag(CorpsePickableWayPoint)))
    {
        SetLocalInt(OBJECT_SELF,CorpseCriticalResult,0);

        object opener = GetLastOpenedBy();
        object target = GetLocalObject(OBJECT_SELF,CorpseCreatureCorpse);
        object pc = GetLocalObject(target,CorpsePCCorpse);

      /*if(GetIsObjectValid(pc))
        {
            target = pc;
        }*/


        if(GetLocalInt(OBJECT_SELF,CorpseFindDifficultyVarName) > 0 && !GetIsDM(opener))
        {

            int value = searchTest(opener);

            if(value >= 0)
            {
                if(GetLocalInt(OBJECT_SELF,CorpseCriticalResult) == 1 )
                {
                    //WriteTimestampedLogEntry(&qu ot;Getting objects, critical success...");

                    GetItemsInInventory(target,0,TRUE,opener);
                    SetCorpseDialogFound(TRUE);
                }
                else if(GetLocalInt(OBJECT_SELF,CorpseCriticalResult) == 3)
                {

                    GetItemsInInventory(target,0,TRUE,opener);
                    SetCorpseDialogFound(TRUE);
                }
                else if(GetLocalInt(OBJECT_SELF,CorpseCriticalResult) == 0)
                {
                    int itemNumber = (value/5) + 1;
                    //WriteTimestampedLogEntry(&qu ot;Getting objects...");

                    GetItemsInInventory(target,itemNumber,TRUE,opener);

                    SetCorpseDialogFound(TRUE);
                }
              SetCommandable(TRUE);
              ActionDoCommand(SpeakOneLinerConversation(CorpseOneLinerDialogName,opener));
              ActionDoCommand(SetCommandable(TRUE));
              SetCommandable(FALSE);
            }
            else
            {
                //WriteTimestampedLogEntry(&qu ot;Getting allready found objects...");

                GetFoundItemsInInventory(target,opener);

            }
            TakeGoldFromCreature(GetGold(target),target);
        }
        else
        {
            //WriteTimestampedLogEntry(&qu ot;Getting allready found objects...");
            GetItemsInInventory(target);
            //SetCorpseDialogFound(TRUE);
            //WriteTimestampedLogEntry(&qu ot;searchTest DD value = "+IntToString(getFindDiff iculty())); //debug
            TakeGoldFromCreature(GetGold(target),target);
        }

        DeleteLocalInt(OBJECT_SELF,CorpseCriticalResult);
    }

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


OnspellcastAt

NWScript :
#include "corpse_lib"
void getInventory(object target,location moveTo)
{
    TakeGoldFromCreature(GetGold(target),target);

    GetItemsInInventory(target,0,FALSE,OBJECT_INVALID,TRUE);
    SetCommandable(TRUE);
    /*object ghost = GetObjectByTag("CorpseGho st");
    object player = OBJECT_SELF;
        //SetCutsceneMode(player,TRUE) ;

        object item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_ARMS));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_ARMS);

        item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_ARROWS));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_ARROWS);

        item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_BELT));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_BELT);

        item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_BOLTS));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_BOLTS);

        item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_BOOTS));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_BOOTS);

        item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_BULLETS));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_BULLETS);

        item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_CARMOUR));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_CARMOUR);

        item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_CHEST));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_CHEST);

        item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_CLOAK));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_CLOAK);



        item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_HEAD));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_HEAD);


        item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_LEFTHAND));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_ARMS);

        item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_LEFTRING));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_LEFTRING);

        item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_NECK));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_NECK);

        item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_RIGHTHAND));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_RIGHTHAND);

        item = GetLocalObject(ghost,GetPCID(p layer)+IntToString(INVENTORY_S LOT_RIGHTRING));
        ActionTakeItem(item,ghost);
        ActionEquipItem(item,INVENTORY _SLOT_RIGHTRING);

        ActionJumpToLocation(moveTo);* /

        ActionDoCommand(SetCutsceneMode(OBJECT_SELF,FALSE));
        //SetCutsceneMode(OBJECT_SELF, FALSE);
}

/*void next2(object corpse,string script);
void next1(object PC,int spell)
{
    location moveTo = GetLocation(OBJECT_SELF);
    effect resurrection = EffectResurrection();

    ApplyEffectToObject(DURATION_T YPE_INSTANT,resurrection,PC);

    object corpse = OBJECT_SELF;

    AssignCommand(PC,ClearAllActio ns(TRUE));
    AssignCommand(PC,ActionJumpToL ocation(moveTo));
    //AssignCommand(PC,ActionDoCom mand(next2(corpse,script)));
    AssignCommand(PC,ActionDoComma nd(SetCommandable(TRUE)));
    AssignCommand(PC,SetCommandabl e(FALSE));
    effect eVis = EffectVisualEffect(VFX_IMP_RAI SE_DEAD);

    ApplyEffectAtLocation(DURATION _TYPE_INSTANT,eVis,GetLocation (OBJECT_SELF));


    if(spell == SPELL_RESURRECTION)
    {
        ApplyEffectToObject(DURATION_T YPE_INSTANT,EffectHeal(GetMaxH itPoints(PC)),PC);
    }
    DeleteLocalObject(PC,CorpsePCC orpse);
    giveBackItems(PC,TRUE,TRUE,TRU E);
}
void next2(object corpse,string script)
{
    object PC = OBJECT_SELF;

    effect death        = EffectDeath(FALSE,FALSE);
    SetLocalObject(PC,CorpsePCCorp se,PC);
    ApplyEffectToObject(DURATION_T YPE_INSTANT,death,PC);
    //AssignCommand(corpse,SetLoca lObject(OBJECT_SELF,CorpseCrea tureCorpse,PC));
    AssignCommand(corpse,giveBackI tems(PC,TRUE,TRUE,TRUE));
    AssignCommand(corpse,SetComman dable(TRUE));
    //AssignCommand(corpse,ActionW ait(3.0));
    AssignCommand(corpse,ActionDoC ommand(ExecuteScript(script,OB JECT_SELF)));
    //AssignCommand(corpse,ActionD oCommand(DeleteLocalObject(PC, CorpsePCCorpse)));
    AssignCommand(corpse,ActionDoC ommand(SetCommandable(TRUE)));
    AssignCommand(corpse,SetComman dable(FALSE));
}*/

void main()
{
    int spell = GetLastSpell();
    object this = OBJECT_SELF;
    object caster = GetLastSpellCaster();
    object target = GetLocalObject(OBJECT_SELF,CorpseCreatureCorpse);
    object PC = GetLocalObject(target,CorpsePCCorpse);

    SetLocalObject(OBJECT_SELF,CorpseSpellCaster,caster);

    //WriteTimestampedLogEntry(&qu ot;Spell casted on corpse: "+IntToString(spell));
    if(!GetCorpseIsNotResurectable(target) && GetLocalString(target,CorpseDeadPCLeftID) == "")
    {
        if(SPELL_RESURRECTION == spell)
        {
            if(GetIsObjectValid(PC))
            {
                //target = PC;
                SetCutsceneMode(PC);
                AssignCommand(PC,ClearAllActions(TRUE));
                DestroyEquipment(target);
                //GetItemsInInventory(target,0 ,FALSE,OBJECT_INVALID,TRUE);

                ActionDoCommand(SetLocalObject(OBJECT_SELF,CorpseCreatureCorpse,PC));
                location moveTo = GetLocation(OBJECT_SELF);
                effect resurrection = EffectResurrection();

                ApplyEffectToObject(DURATION_TYPE_INSTANT,resurrection,PC);

                object corpse = OBJECT_SELF;

                effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD);

                ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVis,GetLocation(OBJECT_SELF));



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

                AssignCommand(PC,ActionJumpToLocation(moveTo));

                //AssignCommand(PC,ActionDoCom mand(SetCommandable(TRUE)));



                DeleteLocalObject(PC,CorpsePCCorpse);

                //AssignCommand(PC,ActionDoCom mand(SetCutsceneMode(PC,FALSE) ));

                giveBackItems(PC,TRUE,TRUE,TRUE);
                AssignCommand(PC,ActionDoCommand(getInventory(target,moveTo)));
                /*AssignCommand(target,giveBac kItems(PC,TRUE,FALSE,TRUE));
                AssignCommand(target,SetComman dable(TRUE));
                AssignCommand(target,ActionDoC ommand(SetIsDestroyable(TRUE)) );*/

            }
            else
            {
                AssignCommand(target,giveBackItems(OBJECT_SELF,TRUE,TRUE));
                ExecuteScript(ResurectionScriptName,OBJECT_SELF);
                giveBackItems(target,TRUE,TRUE,TRUE);
            }
        }
        else if(SPELL_RAISE_DEAD == spell)
        {
            if(GetIsObjectValid(PC))
            {
                //target = PC;
                SetCutsceneMode(PC);
                AssignCommand(PC,ClearAllActions(TRUE));
                DestroyEquipment(target);
                //GetItemsInInventory(target,0 ,FALSE,OBJECT_INVALID,TRUE);

                ActionDoCommand(SetLocalObject(OBJECT_SELF,CorpseCreatureCorpse,PC));
                location moveTo = GetLocation(OBJECT_SELF);
                effect resurrection = EffectResurrection();

                ApplyEffectToObject(DURATION_TYPE_INSTANT,resurrection,PC);

                object corpse = OBJECT_SELF;

                effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD);

                ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVis,GetLocation(OBJECT_SELF));





                AssignCommand(PC,ActionJumpToLocation(moveTo));

                //AssignCommand(PC,ActionDoCom mand(SetCommandable(TRUE)));



                DeleteLocalObject(PC,CorpsePCCorpse);

                //AssignCommand(PC,ActionDoCom mand(SetCutsceneMode(PC,FALSE) ));

                giveBackItems(PC,TRUE,TRUE,TRUE);
                AssignCommand(PC,ActionDoCommand(getInventory(target,moveTo)));


                /*SetCommandable(TRUE);
                ActionDoCommand(next1(PC,spell ));
                ActionDoCommand(SetCommandable (TRUE));
                SetCommandable(FALSE);*/

            }
            else
            {
                AssignCommand(target,giveBackItems(OBJECT_SELF,TRUE,TRUE));
                ExecuteScript(RaiseDeadScriptName,OBJECT_SELF);
                giveBackItems(target,TRUE,TRUE,TRUE);
            }
        }
    }
}
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.


Walla ... donc les modifications qui m'interesseraient .. serais .. une fois le pj mort la creation d'un sac contenant tout son or.

un respawn en fonction de son alignement

enlever le drop dans le corp de tout l'inventaire du pj. juste que en ouvrant l'inventaire (une fois le pj respawn ) on ne trouve que l'objet d'inventaire corp.

inclure dés que le pj est mort ( encore a l'ecran de mort ) une perte d'xp
et aucune perte au respawn.

j'ai regarder dans anphillia il y des parties de scripts qui m'interesserais mais je ne sais pas dechiffrer cela pour prendre les parties qui m'interessent ....

Voila si quelqu'un voulais bien m'aider ... ^^ c'est pour la creation d'un monde persistant ^^

Mercii d'avance
_________________
heureux l'etudiant qui comme la riviere peut suivre son cour sans quitter son lit
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé 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 425.986ms