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:29:12


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Mans-maniac
Novice
Inscrit le: 02 Sep 2005
Messages: 15
Répondre en citant
Posté le : 06/04/2006 22:20:04 Sujet du message : script de garde modifié pti prob

voila modifié un script pour le port d arme (script de David "The Shadowlord" recuperé ici) j y ai rajouté un objet qui permet au garde pj de patrouiller la ville l arme au poing
tant qu il n y que 1 pj pres du garde ca fonctionne a merveille mais des qu ils sont plusieurs il suffit qu un seul possede l objet pour que le garde n attaque pas les autres

je mets le script si quelqu un a le temps de voir se qui cloche
les modifs concerne
NWScript :
object oRing = GetItemPossessedBy(oPC, "talorix");
            if(oPC != OBJECT_INVALID && (GetDistanceBetween(OBJECT_SELF,oPC) < WARN_DISTANCE) && GetObjectSeen(oPC) && !GetIsEnemy(oPC) && oRing == 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.


dans le OnHeartBeat

NWScript :
//Confused//////////////////////// ////////////////////
//:: Created By: David "The Shadowlord" Corrales
//:: Created On: August 20 2002
//Confused//////////////////////// ////////////////////

#include "NW_I0_GENERIC"

//VARIABLES START - EDIT AT OWN PLEASURE
string WARNING1 = "";
string WARNING2 = "";
string WARNING3 = "";//Move to Player
string ATTACK_MSG = "";//Attack here
string COMPLY_REPLY = "Merci messire";
float WARN_DISTANCE = 20.0;//Distance in which to spot player
float ANGER_DUR = 120.0; //Length of time (sec) that will remain angry at the pc
//END OF VARIABLES

void main()
{


    object oPC;
    object item;

        oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF);
        object oRing = GetItemPossessedBy(oPC, "talorix");
            if(oPC != OBJECT_INVALID && (GetDistanceBetween(OBJECT_SELF,oPC) < WARN_DISTANCE) && GetObjectSeen(oPC) && !GetIsEnemy(oPC) && oRing == OBJECT_INVALID )
            {

            if((item = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC))!=OBJECT_INVALID)
            {
                if(GetLocalObject(OBJECT_SELF,"LastOffender")==oPC)
                {
                    if(GetLocalInt(OBJECT_SELF,"OffenseCount")==2)
                    {
                        SpeakString(ATTACK_MSG);
                        SetIsTemporaryEnemy(oPC,OBJECT_SELF,TRUE,ANGER_DUR);
                        DeleteLocalInt (OBJECT_SELF,"OffenseCount");
                        ActionAttack(oPC);
                    }
                    else if(GetLocalInt(OBJECT_SELF,"OffenseCount")==1)
                    {
                        ActionMoveToObject(oPC,TRUE);
                        SetLocalInt(OBJECT_SELF,"OffenseCount",2);
                        SpeakString(WARNING3);
                    }
                    else
                    {
                        SetLocalInt(OBJECT_SELF,"OffenseCount",1);
                        SpeakString(WARNING2);
                    }
                }
                else
                {
                      SetLocalInt(OBJECT_SELF,"OffenseCount",0);
                      SpeakString(WARNING1);
                      SetLocalObject(OBJECT_SELF,"LastOffender",oPC);
                }
            }
            else
            {
                    if( GetLocalObject(OBJECT_SELF,"LastOffender")!= OBJECT_INVALID)
                        SpeakString(COMPLY_REPLY);

                    DeleteLocalObject(OBJECT_SELF,"LastOffender");
                    SetLocalInt(OBJECT_SELF,"OffenseCount",0);
            }
        }

    if(GetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY))
    {
        if(TalentAdvancedBuff(40.0))
        {
            SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY, FALSE);
            return;
        }
    }

    if(GetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING))
    {
        int nDay = FALSE;
        if(GetIsDay() || GetIsDawn())
        {
            nDay = TRUE;
        }
        if(GetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT") != nDay)
        {
            if(nDay == TRUE)
            {
                SetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", TRUE);
            }
            else
            {
                SetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", FALSE);
            }
            WalkWayPoints();
        }
    }

    if(!GetHasEffect(EFFECT_TYPE_SLEEP))
    {
        if(!GetIsPostOrWalking())
        {
            if(!GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget()))
            {
                if(!GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)))
                {
                    if(!GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL) && !IsInConversation(OBJECT_SELF))
                    {
                        if(GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS) || GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN))
                        {
                            PlayMobileAmbientAnimations();
                        }
                        else if(GetIsEncounterCreature() &&
                        !GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)))
                        {
                            PlayMobileAmbientAnimations();
                        }
                        else if(GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS) &&
                          !GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)))
                        {
                            PlayImmobileAmbientAnimations();
                        }
                    }
                    else
                    {
                        DetermineSpecialBehavior();
                    }
                }
                else
                {
                    //DetermineCombatRound();
                }
            }
        }
    }
    else
    {
        if(GetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT))
        {
            effect eVis = EffectVisualEffect(VFX_IMP_SLEEP);
            if(d10() > 6)
            {
                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
            }
        }
    }

    if(GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT))
    {
        SignalEvent(OBJECT_SELF, EventUserDefined(1001));
    }
}
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
 
Mans-maniac
Novice
Inscrit le: 02 Sep 2005
Messages: 15
Répondre en citant
Posté le : 07/04/2006 19:57:13 Sujet du message :

Personne n a une idée ? J ai essayé en rajoutant un oSeen avec un GetLastPerc mais j ai toujours le meme prob faudrait que une fois qui a testé un pj si detecte l objet "talorix" il passe tous de suite a un autre pj doit surement avoir moyen de faire ca mettez moi sur la voix Embarassed
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
Répondre en citant
Posté le : 07/04/2006 23:55:56 Sujet du message :

pourquoi tu mettrais pas plutot ce script dans le onperception ???

m'est d'avis que ça marcherait déjà mieux Wink

Pour oPC par contre tu mets juste oPC = GetLastPerceived()

enfin c'est juste une idée comme çaLaughing
 
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 : 08/04/2006 00:01:11 Sujet du message :

NWScript :

    object oPC;
    object item;
    object oOffender = GetLocalObject(OBJECT_SELF,"LastOffender");
    int bOffense,bDistance = TRUE;
    object oRing;

    if (GetIsObjectValid(oOffender) && GetObjectSeen(oOffender)) oPC = oOffender; //on surveille qulqu'un
    else //on va en cherche un autre
    {
        int i =1;
        do
        {
            oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF,i++);
            oRing = GetItemPossessedBy(oPC, "talorix");
            item = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
            bOffense = (oRing == OBJECT_INVALID && item != OBJECT_INVALID);
            bDistance = GetDistanceBetween(OBJECT_SELF,oPC) < WARN_DISTANCE ;
        } while (oPC != OBJECT_INVALID && bDistance && !bOffense)
    }
    if(bOffense && bDistance && GetObjectSeen(oPC) ) //quelqu'un deconne
    {
        if(oOffender==oPC) //c'est celui qu'on surveillait
        {
            oRing = GetItemPossessedBy(oPC, "talorix");
            item = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
            if (oRing == OBJECT_INVALID && item != OBJECT_INVALID) //il a pas modifie son attitude
            {
                if(GetLocalInt(OBJECT_SELF,"OffenseCount")==2) //attaque
                {
                    SpeakString(ATTACK_MSG);
                    SetIsTemporaryEnemy(oPC,OBJECT_SELF,TRUE,ANGER_DUR);
                    DeleteLocalInt (OBJECT_SELF,"OffenseCount");
                    DeleteLocalObject(OBJECT_SELF,"LastOffender");
                    ActionAttack(oPC);
                }
                else if(GetLocalInt(OBJECT_SELF,"OffenseCount")==1) //averto 3
                {
                    ActionMoveToObject(oPC,TRUE);
                    SetLocalInt(OBJECT_SELF,"OffenseCount",2);
                    SpeakString(WARNING3);
                }
                else //averto 2
                {
                    SetLocalInt(OBJECT_SELF,"OffenseCount",1);
                    SpeakString(WARNING2);
                }
            }
            else //il a range son arme (ou trouve un anneau par terre)
            {
                SpeakString(COMPLY_REPLY);
                DeleteLocalObject(OBJECT_SELF,"LastOffender");
                SetLocalInt(OBJECT_SELF,"OffenseCount",0);
            }
      }
      else //c'est un nouveau garnement averto 1
      {
          SetLocalInt(OBJECT_SELF,"OffenseCount",0);
          SpeakString(WARNING1);
          SetLocalObject(OBJECT_SELF,"LastOffender",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.


Je garantis rien, même pas que ça compile Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Mans-maniac
Novice
Inscrit le: 02 Sep 2005
Messages: 15
Répondre en citant
Posté le : 08/04/2006 11:18:57 Sujet du message :

Merci je vais tester ca compile manquait juste un ; ligne 37 je te tiens au courrant du resulta
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Mans-maniac
Novice
Inscrit le: 02 Sep 2005
Messages: 15
Répondre en citant
Posté le : 08/04/2006 15:28:25 Sujet du message :

bon ca marche pas j ai pas pu tester a plusieur mais seul le script se lance le garde dit sa premiere phrase puis plus rien ca viens peu etre du faite qu il essaye de trouver un autre pc et que comme il n y en a il retourne pas sur le 1 er pj testé

je remets ton script complet en dessous version qui compile Smile


NWScript :
#include "NW_I0_GENERIC"

//VARIABLES START - EDIT AT OWN PLEASURE
string WARNING1 = "";
string WARNING2 = "";
string WARNING3 = "";//Move to Player
string ATTACK_MSG = "";//Attack here
string COMPLY_REPLY = "Merci messire";
float WARN_DISTANCE = 20.0;//Distance in which to spot player
float ANGER_DUR = 120.0; //Length of time (sec) that will remain angry at the pc
//END OF VARIABLES

void main()
{
object oPC;
    object item;
    object oOffender = GetLocalObject(OBJECT_SELF,"LastOffender");
    int bOffense,bDistance = TRUE;
    object oRing;

    if (GetIsObjectValid(oOffender) && GetObjectSeen(oOffender)) oPC = oOffender; //on surveille qulqu'un
    else //on va en cherche un autre
    {
        int i =1;
        do
        {
            oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF,i++);
            oRing = GetItemPossessedBy(oPC, "talorix");
            item = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
            bOffense = (oRing == OBJECT_INVALID && item != OBJECT_INVALID);
            bDistance = GetDistanceBetween(OBJECT_SELF,oPC) < WARN_DISTANCE ;
        } while (oPC != OBJECT_INVALID && bDistance && !bOffense);
    }
    if(bOffense && bDistance && GetObjectSeen(oPC) ) //quelqu'un deconne
    {
        if(oOffender==oPC) //c'est celui qu'on surveillait
        {
            oRing = GetItemPossessedBy(oPC, "talorix");
            item = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
            if (oRing == OBJECT_INVALID && item != OBJECT_INVALID) //il a pas modifie son attitude
            {
                if(GetLocalInt(OBJECT_SELF,"OffenseCount")==2) //attaque
                {
                    SpeakString(ATTACK_MSG);
                    SetIsTemporaryEnemy(oPC,OBJECT_SELF,TRUE,ANGER_DUR);
                    DeleteLocalInt (OBJECT_SELF,"OffenseCount");
                    DeleteLocalObject(OBJECT_SELF,"LastOffender");
                    ActionAttack(oPC);
                }
                else if(GetLocalInt(OBJECT_SELF,"OffenseCount")==1) //averto 3
                {
                    ActionMoveToObject(oPC,TRUE);
                    SetLocalInt(OBJECT_SELF,"OffenseCount",2);
                    SpeakString(WARNING3);
                }
                else //averto 2
                {
                    SetLocalInt(OBJECT_SELF,"OffenseCount",1);
                    SpeakString(WARNING2);
                }
            }
            else //il a range son arme (ou trouve un anneau par terre)
            {
                SpeakString(COMPLY_REPLY);
                DeleteLocalObject(OBJECT_SELF,"LastOffender");
                SetLocalInt(OBJECT_SELF,"OffenseCount",0);
            }
      }
      else //c'est un nouveau garnement averto 1
      {
          SetLocalInt(OBJECT_SELF,"OffenseCount",0);
          SpeakString(WARNING1);
          SetLocalObject(OBJECT_SELF,"LastOffender",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.


peu t on simplement mettre dans le onheartbeat un script qui detecte si le pj a l object "talorix" s il l a on passe a un autre pj et s il ne la pas lancer le script du garde est ce qu un script peu lancer un autre script ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
Répondre en citant
Posté le : 08/04/2006 16:33:16 Sujet du message :

ben au risque de me répéter je trouve plus simple de passer par le onperception du PNJ car il detectera le premier joueur qu'il verra tout simplement et en plus ya pas une grosse modif à faire sur ton script pour ça.

Autre avantage, le script ne se declenchera pas toutes les 6 secondes et quoi qu'il arrive mais uniquement s'il y a des PJs à proximité.

De plus plus besoin de boucler vu qu'un seul PJ sera détecté à la fois et s'il est vu et qu'il a "tailorix" alors il ne sera pas menacé et sinon oui.

Je suis quasiment certain que ça marcherait mieux en plus.

Là j'ai pas aurora mais je peux presque l'affirmer.Embarassed
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Mans-maniac
Novice
Inscrit le: 02 Sep 2005
Messages: 15
Répondre en citant
Posté le : 08/04/2006 17:46:09 Sujet du message :

detrompe toi c est encore pire je l avais fait comme ca au depard mais avec un get perc si le 1 er percu n a pas l objet il peut attaquer meme un joueur qui le possede et surtout pour que le script fonctionne il doit se repeter plusieur fois de suite d ou l obligation de le mettre dans le onheartbeat
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 10/04/2006 12:10:47 Sujet du message :

Voilà celui du TN Bouchon, il fonctionne mais fait effectivement partie des points d'optimisation à faire, sur la journée du 9 Avril :
lyon_somation 7334.667mS pour 7853 calls soit 1.6% du temps de tous les scripts

Il fonctionne sur le heart-beat.
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 :

//:Confused///
//:: Updated Lylver, Octobre 2005
//:: InsignedesChevaliersdeLyon
//:Confused///
#include "NW_I0_GENERIC"
#include "x2_inc_itemprop"

//VARIABLES START - EDIT AT OWN PLEASURE
string WARNING1 = "Retirez vos armes !!";
string WARNING2 = "";
string WARNING3 = "";//Move to Player
string ATTACK_MSG = "";//Attack here
string COMPLY_REPLY = "bien, merci.";
float WARN_DISTANCE = 20.0;//Distance in which to spot player
float ANGER_DUR = 120.0; //Length of time (sec) that will remain angry at the pc
//END OF VARIABLES

void main()
{
object oPC;
object oItem;
int bWeapon = FALSE ;

oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF);

if( oPC != OBJECT_INVALID &&
    (GetDistanceBetween(OBJECT_SELF,oPC) < WARN_DISTANCE) &&
    GetObjectSeen(oPC) &&
    !GetIsEnemy(oPC) ){
  if( (GetItemPossessedBy(oPC,"AmulettedesChevaliersdeLyon")!=OBJECT_INVALID) &&
      (GetLocalInt(OBJECT_SELF,GetFamiliarName(oPC))!=1) ){
      AssignCommand(OBJECT_SELF,ActionPlayAnimation(ANIMATION_FIREFORGET_BOW,1.0));
      if( GetItemPossessedBy(oPC,"InsignedesChevaliersdeLyon")!=OBJECT_INVALID ){
        SpeakString("Bienvenue Seigneur "+GetFamiliarName(oPC)+" "+GetName(oPC));
      }
      SetLocalInt(OBJECT_SELF,GetFamiliarName(oPC), 1);
  }
  oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC) ;
  // check CEP
  if( GetBaseItemType(oItem) >=300 && GetBaseItemType(oItem) <= 324 ){
      bWeapon = TRUE ; // CEP Weapon (a peu pres)
      if( GetBaseItemType(oItem) == 314 ) bWeapon = FALSE ; // Faschion Accessory
  }
  bWeapon = ( bWeapon || // check CEP
            IPGetIsMeleeWeapon(oItem) ||
            IPGetIsRangedWeapon(oItem) ||
            GetIsCreatureDisarmable(oPC) ) && // bah ca mange pas de pain
            (GetBaseItemType(oItem) != BASE_ITEM_MAGICSTAFF) &&
            (GetItemPossessedBy(oPC,"AmulettedesChevaliersdeLyon")==OBJECT_INVALID) &&
            (GetItemPossessedBy(oPC,"InsignedesChevaliersdeLyon")==OBJECT_INVALID) ;
  if( (GetLevelByClass(CLASS_TYPE_DRAGON_DISCIPLE, oPC) > 8) && (d6()==1) ){
      FloatingTextStringOnCreature("*garde un oeil sur le demi-dragon*",OBJECT_SELF,FALSE) ;
  }
  if( GetHasFeat(FEAT_DEATHLESS_MASTER_TOUCH, oPC) && (d6()==1) ){
      FloatingTextStringOnCreature("",OBJECT_SELF,FALSE) ;
  }
  if( bWeapon ){
      if( GetLocalObject(OBJECT_SELF,"LastOffender")==oPC ){
        if( GetLocalInt(OBJECT_SELF,"OffenseCount")==2 ){
            SpeakString(ATTACK_MSG);
            SetIsTemporaryEnemy(oPC,OBJECT_SELF,TRUE,ANGER_DUR);
            if( GetIsInCombat(oPC) ||
                (GetAppearanceType(oPC) >6) || // metamorphe (apparence non humanoide)
                (GetLevelByClass(CLASS_TYPE_DRAGON_DISCIPLE, oPC) > 8) || // ailes
                GetHasFeat(FEAT_DEATHLESS_MASTER_TOUCH, oPC) ){ // bras mort-vivant
              ActionAttack(oPC); // pour SPECIAL_ATTACK_DISARM mettre le don ad hoc
            }
            else {
              AssignCommand(oPC,ActionUnequipItem(oItem)) ;
              FloatingTextStringOnCreature("*range son arme*",oPC,FALSE) ;
            }
        } else if( GetLocalInt(OBJECT_SELF,"OffenseCount")==1 ){
            ActionMoveToObject(oPC,TRUE);
            SetLocalInt(OBJECT_SELF,"OffenseCount",2);
            SpeakString(WARNING3);
        } else {
            SetLocalInt(OBJECT_SELF,"OffenseCount",1);
            SpeakString(WARNING2);
        }
      } else {
        SetLocalInt(OBJECT_SELF,"OffenseCount",0);
        SpeakString(WARNING1);
        SetLocalObject(OBJECT_SELF,"LastOffender",oPC);
      }
  } else {
      if( GetLocalObject(OBJECT_SELF,"LastOffender")!= OBJECT_INVALID ){
        SpeakString(COMPLY_REPLY);
        DeleteLocalObject(OBJECT_SELF,"LastOffender");
        SetLocalInt(OBJECT_SELF,"OffenseCount",0);
      }
  }

  if( GetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY) ){
      if( TalentAdvancedBuff(40.0) ){
        SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY, FALSE);
        return;
      }
  }
  if( GetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING) ){
      int nDay = FALSE;
      if( GetIsDay() || GetIsDawn() ){
        nDay = TRUE;
      }
      if( GetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT") != nDay ){
        if( nDay == TRUE ){
            SetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", TRUE);
        } else {
            SetLocalInt(OBJECT_SELF, "NW_GENERIC_DAY_NIGHT", FALSE);
        }
        WalkWayPoints();
      }
  }
  if( !GetHasEffect(EFFECT_TYPE_SLEEP) ){
      if( !GetIsPostOrWalking() ){
        if( !GetIsObjectValid(GetAttemptedAttackTarget()) &&
            !GetIsObjectValid(GetAttemptedSpellTarget()) ){
            if( !GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)) ){
              if( !GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL) &&
                  !IsInConversation(OBJECT_SELF) ){
                  if( GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS) ||
                      GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN) ){
                    PlayMobileAmbientAnimations();
                  } else if( GetIsEncounterCreature() &&
                            !GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)) ){
                    PlayMobileAmbientAnimations();
                  } else if( GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS) &&
                            !GetIsObjectValid(GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN)) ){
                    PlayImmobileAmbientAnimations();
                  }
              } else {
                  DetermineSpecialBehavior();
              }
            } else {
// DetermineCombatRound();
            }
        }
      }
  } else {
      if( GetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT) ){
        effect eVis = EffectVisualEffect(VFX_IMP_SLEEP);
        if( d10() > 6 ){
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
        }
      }
  }
  if( GetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT) ){
      SignalEvent(OBJECT_SELF, EventUserDefined(1001));
  }
}
}
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.


Note :
- merci d'avoir retrouvé le concepteur initial du script : faut toujours rendre à César ... par correction au moins
- on fait soft sur le TNB : l'arme est rangée dans l'inventaire, le garde n'attaque que dans certains cas.
- prise en compte de certaines exceptions "historiques" bâtons de mage et depuis le CEP, les accessoires : ombrelles, éventails etc..
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Mans-maniac
Novice
Inscrit le: 02 Sep 2005
Messages: 15
Répondre en citant
Posté le : 10/04/2006 19:10:45 Sujet du message :

je le vois pas le script ?? ni aucun lien ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Aladar
Chevalier
Inscrit le: 15 Déc 2004
Messages: 96
Localisation: Tours
Répondre en citant
Posté le : 10/04/2006 20:52:10 Sujet du message :

Clic sur le
Citation :
Ce message est un spoiler, et risque de vous informez de choses que vous auriez du apprendre par vous même (fin d'un jeu, film, etc). A vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Mans-maniac
Novice
Inscrit le: 02 Sep 2005
Messages: 15
Répondre en citant
Posté le : 10/04/2006 21:09:17 Sujet du message :

Embarassed merci Embarassed
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Mans-maniac
Novice
Inscrit le: 02 Sep 2005
Messages: 15
Répondre en citant
Posté le : 10/04/2006 21:09:45 Sujet du message :

Embarassed merci Embarassed
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Mans-maniac
Novice
Inscrit le: 02 Sep 2005
Messages: 15
Répondre en citant
Posté le : 10/04/2006 22:11:04 Sujet du message :

le script fonctionne mais le probleme reste le meme en presence de plusieur pj armés il suffit qu un seul d entre eux possede l object pour que le garde arrete
j ai pas encore tous regardé en detail mais je crois que d autre chose ne fonctionne pas comme la detection des classes ddr par exemple
je continu de chercher et si vous avez des idées je prend Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 11/04/2006 00:19:23 Sujet du message :

Exact, c'est du à un GetNearest Unique : c'est trop consommateur sinon.
Mais dans le cas de l'amulette, c'est voulu, le garde (forcément un PJ joueur) gère la situation : on donne la primauté au RP : ca mettrait le bordel à cause du garde qui attaque à coup sur ...
Il se met entre le garde et le contrevenant, neutralisant l'effet du au script.
D'autre part si c'est plusieurs PJ armés et offensifs : c'est une invasion par une autre faction : tant pis pour celui qui est trop prêt.
Si cela dégénère, on peut faire appel à un MD et certains peuvent aussi contrôler les gardes (passage en henchmen) mais ca c'est un autre script que je garde parce qu'il n'est pas finalisé.
Pour l'instant ca nous suffit largement contre les attaques solos en ville.
Mais clair que sur le OnPerception le job serait plus propre et mieux fait.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
Répondre en citant
Posté le : 11/04/2006 08:36:48 Sujet du message :


Lylver a écrit :
Mais clair que sur le OnPerception le job serait plus propre et mieux fait.
merci ça fait plaisir de voir que je révais pas Laughing
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Mans-maniac
Novice
Inscrit le: 02 Sep 2005
Messages: 15
Répondre en citant
Posté le : 11/04/2006 17:06:46 Sujet du message :

sur le onperception le script ne s executera qu une fois donc je vois pas comment il pourrait fonctionner puisque c est a chaque execution du script que les variables change ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
Répondre en citant
Posté le : 11/04/2006 17:27:33 Sujet du message :

non en fait il s'execute pas qu'une fois mais à chaque fois qu'il voit une créature, qu'elle est dans sa zone de vue.
Donc dès qu'un Pj rentre dans sa zone de vue il l'analyse et le script se déclenchera.
En plus le onheartBeat lui se declenche aussi meme si la zone est vide c'est pour cela qu'en regle générale il vaut mieux eviter de passer par lui si on le peut.

ça marche très bien pour mes factions par exemple ce genre de choses et je le fait avec le onperception pourtant.

Je sais qu'on en utilisait un avant mais pour nous il est devenu innutile en fait.

Si je le retrouve je le poste ici.

tient sinon tu as celui là aussi :

[http]
Dernière édition par Macadam le 11/04/2006 17:31:02; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 11/04/2006 17:29:11 Sujet du message :

Il faut déclencher un pseudo-heartbeat sur l'évênement OnPerception

dans le script OnSpawn du garde tu actives la condition pour l'évênement OnPerception
Dans le script de créature OnUserDefined
tu mets ton traitement et à la fin tu boucles tant que tu vois du monde autour.
test du genre
NWScript :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 (ajout)

Une chose intéressante à faire serait de maintenir une liste des PJs/Monstres perçus sous la forme d'une liste d'objets locaux sur le garde :
Code :
Local Int : idx = GetLocalInt(oGarde,"IDX");
Local Object : object oPC = GetLocalObject(oGarde,"SEEN+IntToString(idx));


On parcoure la liste à chaque pHB :
- vérification de la distance
- vérification si créature toujours vue sinon compactage de la liste, et si plus personne : arrêt du pseudo-HB.
- action suivant l'état de la créature (en s'inspirant du script posé dans ce sujet).
 
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 115.286ms