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


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
lhymn
Novice
Inscrit le: 19 Déc 2003
Messages: 10
Répondre en citant
Posté le : 19/12/2003 15:34:40 Sujet du message : Une faction qui n'attaque plus si on possède un objet

Je recherche un scripte ou autre chose qui me permettrait de
Changé la réaction d'une faction (hostilité en neutre par exemple) si on possède un objet (exemple une armure bien précise)

Merci pour toute aide que vous pouvez m'apporté
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Lavok
Légende vivante
Inscrit le: 22 Oct 2002
Messages: 434
Localisation: Sphère planaire
Répondre en citant
Posté le : 19/12/2003 16:41:33 Sujet du message :

Voilà le petit script nécessaire à cette opération :

NWScript :

void main()
{
object oPC = GetFirstPC();

object oItem = GetItemPossessedBy(oPC, "Tag_de_l'objet");
object oMembre = GetObjectByTag("Tag_d'un_membre_quelconque_de_la_faction");
if(GetIsObjectValid(oItem)==FALSE)
{
AdjustReputation(oPC, oMembre, 50-GetFactionAverageReputation(oMembre, 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.

_________________
ToB : Une seule chose semble certaine : tant que le trône de sang de Bhaal restera vide, le chaos règnera.

Moi : Une seule chose semble certaine : tant que la tête de singe de Bush restera vide, le chaos règnera.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lhymn
Novice
Inscrit le: 19 Déc 2003
Messages: 10
Répondre en citant
Posté le : 19/12/2003 17:34:15 Sujet du message : Merci très cool

Merci très cool pour le scripte cela vas bien m'aidé

Pour le module multi on verra une autre fois car je débute

Et merci encore
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lhymn
Novice
Inscrit le: 19 Déc 2003
Messages: 10
Répondre en citant
Posté le : 19/12/2003 17:40:05 Sujet du message :

Je m'ais ce scripte dans OnActivateItem ou autre par ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Lavok
Légende vivante
Inscrit le: 22 Oct 2002
Messages: 434
Localisation: Sphère planaire
Répondre en citant
Posté le : 19/12/2003 18:09:43 Sujet du message :

Non, l'événement OnActivateItem se déclenche quand on utilise le pouvoir spécial d'un objet d'inventaire.

Mets ceci dans l'OnAcquireItem du module :
NWScript :

void main()
{
object oPC = GetModuleItemAcquiredBy();
object oItem = GetModuleItemAcquired();
object oMembre = GetObjectByTag("Tag_d'un_membre_quelconque_de_la_faction");
if(GetTag(oItem)=="Tag_de_l'objet")
{
SetLocalObject(oPC, "objetfaction", oItem);
SetLocalInt(oPC, "factionobjet", GetFactionAverageReputation(oMembre, oPC));
AdjustReputation(oPC, oMembre, 50-GetFactionAverageReputation(oMembre, 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.


Et ça dans le OnUnAcquireItem :
NWScript :

void main()
{
object oPC = GetFirstPC();
object oItem = GetLocalObject(oPC, "objetfaction");
object oMembre = GetObjectByTag("Tag_d'un_membre_quelconque_de_la_faction");
if(GetTag(oItem)=="Tag_de_l'objet")
{
AdjustReputation(oPC, oMembre, GetLocalInt(oPC, "factionobject")-GetFactionAverageReputation(oMembre, 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.


Ce deuxième script remettra l'atitude de la faction à celle qu'elle avait au moment où le joueur ramasse l'objet qui déclenche le changement de réputation.

Ceci dit, si pour que la faction soit neutre il faut que le joueur porte une armure, la procédure est complétement différente.
_________________
ToB : Une seule chose semble certaine : tant que le trône de sang de Bhaal restera vide, le chaos règnera.

Moi : Une seule chose semble certaine : tant que la tête de singe de Bush restera vide, le chaos règnera.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lhymn
Novice
Inscrit le: 19 Déc 2003
Messages: 10
Répondre en citant
Posté le : 19/12/2003 18:51:18 Sujet du message :


Lavok a écrit :

Ceci dit, si pour que la faction soit neutre il faut que le joueur porte une armure, la procédure est complétement différente.
Oui en faite c'est quand le joueur porte une amure bien précise que la faction devint neutre en vers le joueur
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Lavok
Légende vivante
Inscrit le: 22 Oct 2002
Messages: 434
Localisation: Sphère planaire
Répondre en citant
Posté le : 19/12/2003 21:25:13 Sujet du message :

Si tu pouvais expliquer un peu le contexte, je rendrais mes scripts moins austères et je saurais ce qui convient ou non à la situation... Comme tu peux le constater, les scripts que je t'ai donnés jusqu'à présent n'étaient pas adaptés Confused.

En ce qui concerne ton histoire, je suppose qu'il s'agit d'une phase d'infiltration où le joueur se déguise en garde, j'ai bon Surprised ?
_________________
ToB : Une seule chose semble certaine : tant que le trône de sang de Bhaal restera vide, le chaos règnera.

Moi : Une seule chose semble certaine : tant que la tête de singe de Bush restera vide, le chaos règnera.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lhymn
Novice
Inscrit le: 19 Déc 2003
Messages: 10
Répondre en citant
Posté le : 20/12/2003 01:19:32 Sujet du message :

Pardon c'est vrais que je n'ais pas trop expliqué

Tu as tout à fait compris en faîte c'est pour une quête le joueur doit s'introduire dans un campement ennemie pour récupéré un objet et une de façon de le faire c'est de mettre une armure de l'ennemie trouvé

Voilà
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Lavok
Légende vivante
Inscrit le: 22 Oct 2002
Messages: 434
Localisation: Sphère planaire
Répondre en citant
Posté le : 21/12/2003 22:25:30 Sujet du message :

J'ai rajouté un cri d'alerte qui fait se rameuter les autres gardes. Attention, c'est costaud Very Happy !

Script d'include (à ne mettre nulle part mais à nommer 'includealerte') :
NWScript :

void ConditionAlerte(object oIntrus)
{
SpeakString("Alerte !", TALKVOLUME_SHOUT);
AdjustReputation(oIntrus, OBJECT_SELF, -100);
float fDistanceAlerte = 50.0;

object oGarde = GetFirstObjectInShape(SHAPE_SPHERE, fDistanceAlerte, GetLocation(OBJECT_SELF));
while(GetIsObjectValid(oGarde)==TRUE)
{
if(GetFactionEqual(oGarde)==TRUE && GetIsInCombat(oGarde)==FALSE)
{
AssignCommand(oGarde, ActionAttack(oIntrus));
}
oGarde = GetNextObjectInShape(SHAPE_SPHERE, 50.0, GetLocation(OBJECT_SELF));
}
}

void Alerte(object oJoueur)
{
if(GetIsInCombat(OBJECT_SELF)==FALSE && GetCurrentAction(OBJECT_SELF)!= ACTION_ATTACKOBJECT)
{
ConditionAlerte(oJoueur);
}
else if (GetLocalInt(oJoueur, "pjattaqueungarde")==1)
{
ConditionAlerte(oJoueur);
SetLocalInt(oJoueur, "pjattaqueungarde", 2);
}
}
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.


Script à placer dans le 'OnPerception' de chaque garde :
NWScript :

//:Confused///////////////////////// ////////////////////////
//:: NW_C2_DEFAULT2
/*
  Default OnPerception event handler for NPCs.

  Handles behavior when perceiving a creature for the
  first time.
*/

//:Confused///////////////////////// ////////////////////////

#include "includealerte"
#include "nw_i0_generic"

void main()
{
// * if not runnning normal or better Ai then exit for performance reasons
    // * if not runnning normal or better Ai then exit for performance reasons
object oPercep = GetLastPerceived();


   
if(GetIsPC(oPercep)==TRUE)
{
if(GetTag(GetItemInSlot(INVENTORY_SLOT_CHEST, oPercep))=="Tag_armure")
{
    if(GetLocalInt(oPercep, "pjinfiltration")==0)
    {
    AdjustReputation(oPercep, OBJECT_SELF, 50-GetFactionAverageReputation(OBJECT_SELF, oPercep));
    SetLocalInt(oPercep, "pjinfiltration", 1);
    }
    else if(GetIsEnemy(oPercep)==TRUE)
    {
    Alerte(oPercep);
    }
    }
else
{
Alerte(oPercep);
}
}
   





    if (GetAILevel() == AI_LEVEL_VERY_LOW) return;

    int bSeen = GetLastPerceptionSeen();

    // This will cause the NPC to speak their one-liner
    // conversation on perception even if they are already
    // in combat.
    if(GetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION)
      && GetIsPC(oPercep)
      && bSeen)
    {
        SpeakOneLinerConversation();
    }

    // March 5 2003 Brent
    // Had to add this section back in, since  modifications were not taking this specific
    // example into account -- it made invisibility basically useless.
    //If the last perception event was hearing based or if someone vanished then go to search mode
    if ((GetLastPerceptionVanished()) && GetIsEnemy(GetLastPerceived()))
    {
        object oGone = GetLastPerceived();
        if((GetAttemptedAttackTarget() == GetLastPerceived() ||
          GetAttemptedSpellTarget() == GetLastPerceived() ||
          GetAttackTarget() == GetLastPerceived()) && GetArea(GetLastPerceived()) != GetArea(OBJECT_SELF))
        {
            //SpeakString("dude...lik e disappeared.");
          ClearAllActions();
          DetermineCombatRound();
        }
    }

    // This section has been heavily revised while keeping the
    // pre-existing behavior:
    // - If we're in combat, keep fighting.
    // - If not and we've perceived an enemy, start to fight.
    //  Even if the perception event was a 'vanish', that's
    //  still what we do anyway, since that will keep us
    //  fighting any visible targets.
    // - If we're not in combat and haven't perceived an enemy,
    //  see if the perception target is a PC and if we should
    //  speak our attention-getting one-liner.
    if (GetIsFighting(OBJECT_SELF)) {
        // don't do anything else, we're busy
        MyPrintString("GetIsFighting: TRUE");

    }
    // * BK FEB 2003 Only fight if you can see them. DO NOT RELY ON HEARING FOR ENEMY DETECTION
    else if (GetIsEnemy(oPercep) && bSeen) {
        MyPrintString("GetIsEnemy: TRUE");
        // We spotted an enemy and we're not already fighting
        if(!GetHasEffect(EFFECT_TYPE_SLEEP)) {
            if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) {
                MyPrintString("DetermineSpecialBehavior");
                DetermineSpecialBehavior();
            } else {
                MyPrintString("DetermineCombatRound");
                SetFacingPoint(GetPosition(oPercep));
                SpeakString("NW_I_WAS_ATTACKED", TALKVOLUME_SILENT_TALK);
                DetermineCombatRound();
            }
        }
    } else {
        if (bSeen) {
            MyPrintString("GetLastPerceptionSeen: TRUE");
            if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) {
                DetermineSpecialBehavior();
            } else if (GetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION)
                      && GetIsPC(oPercep))
            {
                // The NPC will speak their one-liner conversation
                // This should probably be:
                // SpeakOneLinerConversation(oPer cep);
                // instead, but leaving it as is for now.
                ActionStartConversation(OBJECT_SELF);
            }
        }

        // activate ambient animations or walk waypoints if appropriate
      if (!IsInConversation(OBJECT_SELF)) {
          if (GetIsPostOrWalking()) {
              WalkWayPoints();
          } else if (GetIsPC(oPercep) &&
              (GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS)
                || GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN)
                || GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS)
                || GetIsEncounterCreature()))
          {
                SetAnimationCondition(NW_ANIM_FLAG_IS_ACTIVE);
          }
        }
    }

    // Send the user-defined event if appropriate
    if(GetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT) && GetLastPerceptionSeen())
    {
        SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_PERCEIVE));
    }
}
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.


Script à placer dans le 'OnHeartbeat' de chaque garde :
NWScript :

//:Confused///////////////////////// ////////////////////////
//:: NW_C2_DEFAULT1
/*
  Default OnHeartbeat script for NPCs.

  This script causes NPCs to perform default animations
  while not otherwise engaged.

  This script duplicates the behavior of the default
  script and just cleans up the code and removes
  redundant conditional checks.

*/

//:Confused///////////////////////// ////////////////////////
//:: Copyright (c) 2002 Floodgate Entertainment
//:: Created By: Naomi Novik
//:: Created On: 12/22/2002
//:Confused///////////////////////// ////////////////////////

#include "includealerte"
#include "nw_i0_generic"

void main()
{
     
object oPC = GetFirstPC();
if(GetObjectSeen(oPC) ==TRUE || GetObjectHeard(oPC)==TRUE)
{
if(GetTag(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC))!="Tag_armure" && GetLocalInt(oPC, "pjinfiltration")==1)
{
Alerte(oPC);
}
else if(GetIsEnemy(oPC)==TRUE)
{
Alerte(oPC);
}
}

   








    // * if not runnning normal or better Ai then exit for performance reasons
    if (GetAILevel() == AI_LEVEL_VERY_LOW) return;

    // Buff ourselves up right away if we should
    if(GetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY))
    {
        // This will return TRUE if an enemy was within 40.0 m
        // and we buffed ourselves up instantly to respond --
        // simulates a spellcaster with protections enabled
        // already.
        if(TalentAdvancedBuff(40.0))
        {
            // This is a one-shot deal
            SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY, FALSE);

            // This return means we skip sending the user-defined
            // heartbeat signal in this one case.
            return;
        }
    }


    if(GetHasEffect(EFFECT_TYPE_SLEEP))
    {
        // If we're asleep and this is the result of sleeping
        // at night, apply the floating 'z's visual effect
        // every so often

        if(GetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT))
        {
            effect eVis = EffectVisualEffect(VFX_IMP_SLEEP);
            if(d10() > 6)
            {
                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
            }
        }
    }

    // If we have the 'constant' waypoints flag set, walk to the next
    // waypoint.
    else if ( GetWalkCondition(NW_WALK_FLAG_CONSTANT) )
    {
        WalkWayPoints();
    }

    // Check to see if we should be playing default animations
    // - make sure we don't have any current targets
    else if ( !GetIsObjectValid(GetAttemptedAttackTarget())
          && !GetIsObjectValid(GetAttemptedSpellTarget())
          // && !GetIsPostOrWalking())
          && !GetIsObjectValid(GetNearestSeenEnemy()))
    {
        if (GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL) || GetBehaviorState(NW_FLAG_BEHAVIOR_OMNIVORE) ||
            GetBehaviorState(NW_FLAG_BEHAVIOR_HERBIVORE))
        {
            // This handles special attacking/fleeing behavior
            // for omnivores & herbivores.
            DetermineSpecialBehavior();
        }
        else if (!IsInConversation(OBJECT_SELF))
        {
            if (GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS)
                || GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN)
                || GetIsEncounterCreature())
            {
                PlayMobileAmbientAnimations();
            }
            else if (GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS))
            {
                PlayImmobileAmbientAnimations();
            }
        }
    }

    // Send the user-defined event signal if specified
    if(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT))
    {
        SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_HEARTBEAT));
    }
}
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.


Et enfin script à placer dans le 'OnPhysicalAttacked' de chaque garde :
NWScript :

//:Confused///////////////////////// /////////////////////
//:: Default On Attacked
//:: NW_C2_DEFAULT5
//:: Copyright (c) 2001 Bioware Corp.
//:Confused///////////////////////// ////////////////////
/*
    If already fighting then ignore, else determine
    combat round
*/

//:Confused///////////////////////// ////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Oct 16, 2001
//:Confused///////////////////////// ////////////////////

#include "includealerte"
#include "nw_i0_generic"

void main()
{





object oPC = GetFirstPC();
object oAttaquant = GetLastAttacker();
if(oPC==oAttaquant || oPC==GetMaster(oAttaquant))
{
if(GetTag(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC))=="Tag_armure" && GetLocalInt(oPC, "pjattaqueungarde")==0)
{
SetLocalInt(oPC, "pjattaqueungarde", 1);
Alerte(oPC);
}
}
 



    if(GetFleeToExit()) {
        // Run away!
        ActivateFleeToExit();
    } else if (GetSpawnInCondition(NW_FLAG_SET_WARNINGS)) {
        // We give an attacker one warning before we attack
        // This is not fully implemented yet
        SetSpawnInCondition(NW_FLAG_SET_WARNINGS, FALSE);

        //Put a check in to see if this attacker was the last attacker
        //Possibly change the GetNPCWarning function to make the check
    } else {
        object oAttacker = GetLastAttacker();
        if (!GetIsObjectValid(oAttacker)) {
            // Don't do anything, invalid attacker

        } else if (!GetIsFighting(OBJECT_SELF)) {
            // We're not fighting anyone else, so
            // start fighting the attacker
            if(GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL)) {
                SetSummonHelpIfAttacked();
                DetermineSpecialBehavior(oAttacker);
            } else if (GetArea(oAttacker) == GetArea(OBJECT_SELF)) {
                SetSummonHelpIfAttacked();
                DetermineCombatRound(oAttacker);
            }

            //Shout Attack my target, only works with the On Spawn In setup
            SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);

            //Shout that I was attacked
            SpeakString("NW_I_WAS_ATTACKED", TALKVOLUME_SILENT_TALK);
        }
    }


    if(GetSpawnInCondition(NW_FLAG_ATTACK_EVENT))
    {
        SignalEvent(OBJECT_SELF, EventUserDefined(EVENT_ATTACKED));
    }
}
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.



Brèves explications :

Tu es libre de garder ou non le cri d'alerte, mais j'avais pensé qu'il serait intéressant que des gardes accourent au cri de leur collègue (ainsi le joueur se voit forcé d'attaquer un garde isolé pour réussir son infiltration). La "portée" de ces cris est de 50 mètres par défaut (change le float dans le premier script si tu désires une autre distance).

Le tag de l'armure doit être 'Tag_armure' ou le tien mais dans ce cas, il te faudra changer ce tag dans mes scripts Wink.
_________________
ToB : Une seule chose semble certaine : tant que le trône de sang de Bhaal restera vide, le chaos règnera.

Moi : Une seule chose semble certaine : tant que la tête de singe de Bush restera vide, le chaos règnera.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Slim_Shadow
Novice
Inscrit le: 27 Sep 2004
Messages: 6
Répondre en citant
Posté le : 28/09/2004 13:02:52 Sujet du message :

Pour ca :
NWScript :
if(GetTag(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC))=="Tag_armure" && GetLocalInt(oPC, "pjattaqueungarde")==0)
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 on veut qu'au lieu que cela soit une armure on veuille juste que ce soit une objet dans l'inventaire.
Comment on fait ? Que faut il changé dans tes script pour que ca marche N
Désolé je debute moi aussi Very Happy
 
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 100.345ms