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 17:10:29


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
sylveran
Ecuyer
Inscrit le: 03 Sep 2004
Messages: 57
Localisation: dijon
Répondre en citant
Posté le : 27/04/2006 17:38:14 Sujet du message : reflet d'un pj

bonjour a tous j'ai f&ait se script qui dit que quand un pj utilise un miroir alors celui ci disparait et fait apparaitre le double du pj en hostile

le script marche super bien mais helas quand le double du pj meurs ont peux recuperer toutes ces armes et son inventaires et je voudrais que ces items et sont inventaire disparraissent quand il meurs afin que le pj ne puisse les recuperer

merci de m'apporter un peu d'aide

voici le script


Citation :
void main()
{
object oPC = GetLastUsedBy();
object oReflet=OBJECT_SELF;
location lReflet =GetLocation(oReflet);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(471),lReflet);
DestroyObject(oReflet);
object oCopie =CopyObject(oPC, lReflet,OBJECT_INVALID,"COPIE");
ChangeToStandardFaction(oCopie, STANDARD_FACTION_HOSTILE);
AssignCommand(oCopie, ClearAllActions());
AssignCommand(oCopie, ActionEquipMostDamagingMelee());
AssignCommand(oCopie, ActionAttack(oPC));

object oItem = GetFirstItemInInventory(oReflet); // destruction des items de la copie
while (GetIsObjectValid(oItem) == FALSE)
{
DestroyObject(oItem);
oItem = GetNextItemInInventory(oReflet);
}

}

_________________
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Seth de Sombrelune
Seigneur
Inscrit le: 10 Jan 2005
Messages: 156
Répondre en citant
Posté le : 27/04/2006 17:53:02 Sujet du message :

Voilà il y a quelques temps, j'ai lancé un post sur le Doppelganger

Pour moi c'etait sufisant mais je pense en effet que vider l'inventaire et de rendre indropable les items dont la copie est éditée est la meilleur solution. Les conclusion du posts sont qu'il est imposible de choisir les scripts par defaut de la créature copiée, tout ce qui concerne la créature doit se trouver dans le script qui permet de copier la créature....
_________________
De Tenebris Lumen Fulget.......
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
sylveran
Ecuyer
Inscrit le: 03 Sep 2004
Messages: 57
Localisation: dijon
Répondre en citant
Posté le : 27/04/2006 18:07:56 Sujet du message :

moi je n'ais pas de ondeath du double etant donné qu'il apparait grace a un script dans le onused du miroir et comme le miroir est un item...
_________________
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Seth de Sombrelune
Seigneur
Inscrit le: 10 Jan 2005
Messages: 156
Répondre en citant
Posté le : 27/04/2006 18:37:19 Sujet du message :

Ce que je voulait dire c'est que le SetDropable de l'équipement c'est dans le OnUse de ton miroir que du doit l'inscrir, personne n'a de OnDeath pour la copie, a moins de modifier le script par defaut et d'y ajouter une condition spéciale pour ta créature.
_________________
De Tenebris Lumen Fulget.......
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 27/04/2006 18:38:44 Sujet du message :

sur NWN-système on en était arrivé à ça pour empecher le drop des objets et rendre les lanceurs de sorts moins nuls :

NWScript :
#include "NW_I0_GENERIC"

// VideInventaire
// Vide l'inventaire de l'objet cible oTarget

// si bDestroy = FALSE les rend indropables
void VideInventaire(object oTarget, int bDestroy = TRUE)
{
  object oItem = GetFirstItemInInventory(oTarget);
  while (GetIsObjectValid(oItem))
    {
      if (bDestroy) DestroyObject(oItem, 0.0);
      else SetDroppableFlag(oItem,FALSE);
      oItem = GetNextItemInInventory(oTarget);
    }
}


void DetRound(object oTarget)
{

    if (oTarget == OBJECT_INVALID) return; //a ameliorer si on veut qu'il poursuive le combat sur d'autres cibles etc..
    DetermineCombatRound(oTarget);
    DelayCommand(RoundsToSeconds(1),AssignCommand(OBJECT_SELF,DetRound(oTarget)));
}

void buff()
{

    TalentAdvancedBuff(40.0);
}

void main()
{
{
object oPC = GetEnteringObject();
if (!GetIsPC(oPC) || GetIsDM(oPC) || GetLocalInt(oPC,"CloneDesert")) return; //si y a pas besoin d'executer le script autant quitter tout de suite
location lclonePerso = GetLocation(GetObjectByTag("spawn_clone_enn"));
SetLocalInt(oPC,"CloneDesert",1);
object oCopy = CopyObject(oPC,lclonePerso);
// AssignCommand(oCopy,SetSpawnIn Condition(NW_FLAG_FAST_BUFF_EN EMY));  //essayer sans, en fait je crois que la variable est pas necessaire (elle sert juste dans le OHB des mobs pour lancer le TalentAdvancedBuff()
ChangeToStandardFaction(oCopy,STANDARD_FACTION_HOSTILE);
DelayCommand(1.0,VideInventaire(OBJECT_SELF,FALSE));
DelayCommand(0.5,ForceRest(oCopy));
DelayCommand(0.6,AssignCommand(oCopy,buff())); //le coup de vice
DelayCommand(0.8,AssignCommand(oCopy,DetRound(oPC))); //histoire que la copie ait une AI pendant plus d'un round...
}
}
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 c'est pour un^placeable change oPC en GetLastUsedBy() au lieu de GetEnteringObject()

le topic d'origine pour info et crédits


EDIT : et si tu tiens à corriger juste ton premier script, vire le ==FALSE de la condition du while.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 28/04/2006 11:31:24 Sujet du message :

Dans l'extension 2 du jeu, partie 1, dans "Montprofond - Centre", il y a le script que tu cherches avec un miroir qui créer un PNJ identique au PJ.
Les armes et équipements sont les mêmes, et ne sont pas récupérables à la mort de la créature.

Ca donne ceci : (cf spoiler)

Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :
NWScript :
#include "nw_i0_generic"
void CloneFight()
{
    DetermineCombatRound();
    DelayCommand(4.0, CloneFight());
}
void main()
{
    ActionSpeakString("Vous voyez votre reflet sortir du miroir et vous attaquer !");
    if (GetLocalInt(OBJECT_SELF, "nCopy") == 1)
        return;
    SetLocalInt(OBJECT_SELF, "nCopy", 1);

    location lMirror = GetLocation(GetWaypointByTag("wp_mirror_spawn"));
    object oPC = GetPCSpeaker();

    ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(471), lMirror);

    object oCopy1 = CopyObject(oPC, lMirror, OBJECT_INVALID, "q2bclone1");

    //Create the heartbeat object to keep the clone attacking
    object oHeart = CreateObject(OBJECT_TYPE_PLACEABLE, "q2bclonehb", lMirror);

    //Make sure the copies don't drop anything
    object oGear = GetItemInSlot(INVENTORY_SLOT_ARMS, oCopy1);


    if(GetIsObjectValid(oGear))
    {
        SetDroppableFlag(oGear, FALSE);
    }
    oGear = GetItemInSlot(INVENTORY_SLOT_ARROWS, oCopy1);
    if(GetIsObjectValid(oGear))
    {
        SetDroppableFlag(oGear, FALSE);
    }
    oGear = GetItemInSlot(INVENTORY_SLOT_BELT, oCopy1);
    if(GetIsObjectValid(oGear))
    {
        SetDroppableFlag(oGear, FALSE);
    }
    oGear = GetItemInSlot(INVENTORY_SLOT_BOLTS, oCopy1);
    if(GetIsObjectValid(oGear))
    {
        SetDroppableFlag(oGear, FALSE);
    }
    oGear = GetItemInSlot(INVENTORY_SLOT_BOOTS, oCopy1);
    if(GetIsObjectValid(oGear))
    {
        SetDroppableFlag(oGear, FALSE);
    }
    oGear = GetItemInSlot(INVENTORY_SLOT_BULLETS, oCopy1);
    if(GetIsObjectValid(oGear))
    {
        SetDroppableFlag(oGear, FALSE);
    }
    oGear = GetItemInSlot(INVENTORY_SLOT_CHEST, oCopy1);
    if(GetIsObjectValid(oGear))
    {
        SetDroppableFlag(oGear, FALSE);
    }
    oGear = GetItemInSlot(INVENTORY_SLOT_CLOAK, oCopy1);
    if(GetIsObjectValid(oGear))
    {
        SetDroppableFlag(oGear, FALSE);
    }
    oGear = GetItemInSlot(INVENTORY_SLOT_HEAD, oCopy1);
    if(GetIsObjectValid(oGear))
    {
        SetDroppableFlag(oGear, FALSE);
    }
    oGear = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCopy1);
    if(GetIsObjectValid(oGear))
    {
        SetDroppableFlag(oGear, FALSE);
    }
    oGear = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oCopy1);
    if(GetIsObjectValid(oGear))
    {
        SetDroppableFlag(oGear, FALSE);
    }
    oGear = GetItemInSlot(INVENTORY_SLOT_NECK, oCopy1);
    if(GetIsObjectValid(oGear))
    {
        SetDroppableFlag(oGear, FALSE);
    }
    oGear = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCopy1);
    if(GetIsObjectValid(oGear))
    {
        SetDroppableFlag(oGear, FALSE);
    }
    oGear = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oCopy1);
    if(GetIsObjectValid(oGear))
    {
        SetDroppableFlag(oGear, FALSE);
    }


    //Empty all items from copy 1's inventory
    oGear = GetFirstItemInInventory(oCopy1);
    while (oGear != OBJECT_INVALID)
    {
        SetDroppableFlag(oGear, FALSE);
        oGear = GetNextItemInInventory(oCopy1);
    }

    ChangeToStandardFaction(oCopy1, STANDARD_FACTION_HOSTILE);

    int nGold = GetGold(oCopy1);
    TakeGoldFromCreature(nGold, oCopy1, TRUE);
    //create a back up dagger - in case the PC didn't have any melee weapons
    object oDagger = CreateItemOnObject("nw_wswmdg008", oCopy1);
    SetDroppableFlag(oDagger, FALSE);
    AssignCommand(oCopy1, ClearAllActions());
    AssignCommand(oCopy1, ActionEquipMostDamagingMelee());
//    DelayCommand(1.5, AssignCommand(oCopy1, ActionAttack(oPC)));
    DelayCommand(2.0, AssignCommand(oCopy1, CloneFight()));

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


Il fait aussi appel à un OnHeartbeat sur un objet invisible ( "q2bclonehb" ) qu'il crée :

Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :
NWScript :
//q2b_hb_cloneobj
//Keep the mirror clone(s) attacking their nearest target
void main()
{
    object oClone1 = GetObjectByTag("q2bclone1");
    int bDead1 = FALSE;
    int bDead2 = FALSE;
    //clone 1 - attack nearest target
    if (GetIsObjectValid(oClone1) == TRUE)
    {
        object oEnemy1 = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, oClone1);
        AssignCommand(oClone1, ActionAttack(oEnemy1));
    }
    else
    {
        bDead1 = TRUE;
    }
    //clone 2 attack nearest target
    object oClone2 = GetObjectByTag("q2bclone2");
    if (GetIsObjectValid(oClone2) == TRUE)
    {
        object oEnemy2 = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, oClone2);
        AssignCommand(oClone2, ActionAttack(oEnemy2));
    }
    else
    {
        bDead2 = TRUE;
    }

    //Else destroy the hb object
    if (bDead1 == TRUE && bDead2 == TRUE)
        DestroyObject(OBJECT_SELF);


}
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
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 28/04/2006 17:22:07 Sujet du message :

Ouais sauf que si tu joues un magot, le double va t'attaquer avec son pauvre baton pendant que tu le pourris à coup de flétrissure et doigts de morts.

Dans HotU, avec mon mage, le combat a duré un round.
En revanche, le coup de virer l'or est pas mal, je pense qu'avec le script que j'ai posté plus haut il est toujours droppable, et peut-être les objets équipés aussi. Mais pour le combat proprement dit il est mieux, même si il peut largement être amélioré encore.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé 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 35.195ms