Les Vaux

Forum dédié au mod
 
AccueilPortailCalendrierGalerieFAQRechercherS'enregistrerMembresGroupesConnexion

Partagez | 
 

 Gardes intelligents

Aller en bas 
AuteurMessage
Admin
Cerbère
Cerbère
avatar

Nombre de messages : 156
Date d'inscription : 07/10/2006

MessageSujet: Gardes intelligents   Lun 16 Juin 2008 - 8:51

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

#include "NW_I0_GENERIC"

//VARIABLES START - EDIT AT OWN PLEASURE

string WARNING1 = "S'il vous plaît, Rangez votre arme!";
string WARNING2 = "Je vous ai dit de déposer vos armes!";
string WARNING3 = "Obéissez! Sinon vous serez abattu!"; //Move to Player
string ATTACK_MSG = "Soit! Je vous avais prévenu!"; //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



object GetItem(object oPC)
{
object item=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);

//divers objets autorises

string Tag=GetTag(item);
if( Tag=="NW_IT_TORCH001" ||
Tag=="ZEP_GUITAR" ||
Tag=="ZEP_HARP" ||
Tag=="ZEP_LUTE" ||
Tag=="ZEP_PIPES" ||
Tag=="ZEP_TAMBOURINE" ||
Tag=="ZEP_VIOLINF" ||
Tag=="ZEP_VIOLINM" ||
Tag=="ZEP_VIOLINBOW" ||
Tag=="ZZEP_BOOK" ||
Tag=="ZEP_UMBRELLA" ||
Tag=="ZEP_PAPOOSE" ||
Tag=="ZEP_FASHION" ||
Tag=="ZEP_FAN" ||
Tag=="ZEP_CRYSTALBALL"
)
item= OBJECT_INVALID;


//autorise batons, sceptres et autres

int Type=GetBaseItemType(item);
if( Type==BASE_ITEM_MAGICROD ||
Type==BASE_ITEM_MAGICSTAFF ||
Type==BASE_ITEM_MAGICWAND)
item= OBJECT_INVALID;



//dispense speciale pour les gardes
if(GetTag(GetItemInSlot(INVENTORY_SLOT_CHEST,oPC))=="EXE_ARMURE")
item= OBJECT_INVALID;



return item;
}


void main()
{
object oPC;
object item;

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((item = GetItem(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);
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));
}
}
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nwn2-lesvaux.easyforumpro.com
CyberDomovoy
paysan
paysan
avatar

Nombre de messages : 2
Date d'inscription : 10/02/2009

MessageSujet: Re: Gardes intelligents   Mar 10 Fév 2009 - 19:29

Code:

//:://////////////////////////////////////////////
//:: Created By: CyberDomovoy
//:: Created On: 2009/02/10
//:://////////////////////////////////////////////

#include "NW_I0_GENERIC"

//VARIABLES START - EDIT AT OWN PLEASURE

string WARNING1 = "S'il vous plaît, Rangez votre arme!";
string WARNING2 = "Je vous ai dit de déposer vos armes!";
string WARNING3 = "Obéissez! Sinon vous serez abattu!"; //Move to Player
string ATTACK_MSG = "Soit! Je vous avais prévenu!"; //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



object GetItem(object oPC)
{
   object item=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);

   //divers objets autorises

   string Tag=GetTag(item);
   if( Tag=="NW_IT_TORCH001" ||
      Tag=="ZEP_GUITAR" ||
      Tag=="ZEP_HARP" ||
      Tag=="ZEP_LUTE" ||
      Tag=="ZEP_PIPES" ||
      Tag=="ZEP_TAMBOURINE" ||
      Tag=="ZEP_VIOLINF" ||
      Tag=="ZEP_VIOLINM" ||
      Tag=="ZEP_VIOLINBOW" ||
      Tag=="ZZEP_BOOK" ||
      Tag=="ZEP_UMBRELLA" ||
      Tag=="ZEP_PAPOOSE" ||
      Tag=="ZEP_FASHION" ||
      Tag=="ZEP_FAN" ||
      Tag=="ZEP_CRYSTALBALL"
   )
   {
      return OBJECT_INVALID;
   }
 

   //autorise batons, sceptres et autres

   int Type = GetBaseItemType(item);

   if( Type==BASE_ITEM_MAGICROD ||
      Type==BASE_ITEM_MAGICSTAFF ||
      Type==BASE_ITEM_MAGICWAND
   )
   {
      return OBJECT_INVALID;
   }

   //dispense speciale pour les gardes
   if(GetTag(GetItemInSlot(INVENTORY_SLOT_CHEST,oPC))=="EXE_ARMURE")
   {
      return OBJECT_INVALID;
   }

   return item;
}


void main()
{
   object oPC;
   object item;
   int nbOffense;
   string sSpeach;

   oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF);
   item;

   // Si oPC est un objet valide, dans la distance d'avertissement, visible, non ennemi
   // et qu'il tient un objet valide et interdit
   if( oPC != OBJECT_INVALID &&
      ( GetDistanceBetween(OBJECT_SELF,oPC) < WARN_DISTANCE ) &&
      GetObjectSeen(oPC) &&
      !GetIsEnemy(oPC) &&
      ( item = GetItem(oPC) ) != OBJECT_INVALID
   )
   {
      if( GetLocalObject(OBJECT_SELF, "LastOffender") != oPC )
      {
         // si oPC n'est pas le meme chieur que le dernier
         SetLocalObject(OBJECT_SELF, "LastOffender", oPC);
         nbOffense = 1;
      }
      else
      {
         nbOffense = GetLocalInt(OBJECT_SELF,"OffenseCount") + 1;
          }
      // MAJ du nombre d'avertissements
             SetLocalInt(OBJECT_SELF, "OffenseCount", nbOffense);

      // un switch c'est toujours plus beau qu'une succession de if/else ...
      switch( nbOffense )
      {
         case 1:
         {
            // 1er avertissement
            sSpeach = WARNING1;
            break;
         }
         case 2:
         {
            // 2eme avertissement
                 sSpeach = WARNING2;
            break;
         }
         case 3:
         {
            // 3eme avertissement
            ActionMoveToObject(oPC, TRUE);
                 sSpeach = WARNING3;
            break;
         }
         case 4:
         {
            // attaque
            sSpeach = ATTACK_MSG;
                   SetIsTemporaryEnemy(oPC, OBJECT_SELF, TRUE, ANGER_DUR);
                   ActionAttack(oPC);
            break;
         }
      }
      SpeakString(sSpeach);
     }
     else
     {
          if( GetLocalObject(OBJECT_SELF,"LastOffender") != OBJECT_INVALID)
          {
         // Si on avait un chieur, on l'a plus...
               SpeakString(COMPLY_REPLY);
               DeleteLocalObject(OBJECT_SELF, "LastOffender");
               SetLocalInt(OBJECT_SELF, "OffenseCount", 0);
          }
     }

   // Partie que je capte pas trop... script d'origine du jeu? ca deal avec les conditions de spawn...

   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))
   {
      // actions jour/nuit
        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) &&
      !GetIsPostOrWalking() &&
      !GetIsObjectValid(GetAttemptedAttackTarget()) &&
      !GetIsObjectValid(GetAttemptedSpellTarget())
   )
   {
      // pas endormi, en train de surveiller ou se deplacer, d'attaquer, de lancer des sorts

            if( !GetIsObjectValid( GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN) ) )
            {
         // Aucun ennemi a l'horizon

              if(!GetBehaviorState(NW_FLAG_BEHAVIOR_SPECIAL) && !IsInConversation(OBJECT_SELF))
              {
            // On est pas en train d'agir ou parler

                   if( GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS) ||
               GetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS_AVIAN) ||
               GetIsEncounterCreature() )
                   {
                        PlayMobileAmbientAnimations();
                   }
                 else if( GetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS) )
                 {
                      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));
   }
}
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
CyberDomovoy
paysan
paysan
avatar

Nombre de messages : 2
Date d'inscription : 10/02/2009

MessageSujet: Re: Gardes intelligents   Mar 10 Fév 2009 - 19:30

houla, faut revoir le style des balises de code ^^

bon sinon ca avance par la?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Admin
Cerbère
Cerbère
avatar

Nombre de messages : 156
Date d'inscription : 07/10/2006

MessageSujet: Re: Gardes intelligents   Dim 8 Mar 2009 - 1:44

ben je te laisserais un peu y regarder le forum, j'ai galéré déjà avec ce prefab^^
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nwn2-lesvaux.easyforumpro.com
Contenu sponsorisé




MessageSujet: Re: Gardes intelligents   

Revenir en haut Aller en bas
 
Gardes intelligents
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Conversion de Power Fist pour gardes impériaux
» Socle Gardes de la Cour de la Fontaine
» Gardes serpents
» [Caserne] Quartier Général des Gardes Khazad
» Organisation des Gardes de la Citadelle

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Les Vaux :: Espace conception :: Aide au scriptage-
Sauter vers: