La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 17/05/2024 08:15:58


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
MatMat
Voyageur
Inscrit le: 11 Déc 2005
Messages: 3
Répondre en citant
Posté le : 27/01/2006 14:38:54 Sujet du message : Script pour faire apparaitre des créatures

Tout d'abord bonjour !
Bon je vous explique mon problème je voudrais faire un script qui fait que lorsque'on entre dans un déclencheur une créature apparait...

J'ai naîvement fait ceci : (vous moquer pas de moi j'y connas rien:sad:)

NWScript :
void main()
{
int nObjectType=OBJECT_TYPE_CREATURE;
string sTemplate="test00";
location lLocation=GetLocation(GetObjectByTag("WP_EPREUVEUN"));
int bUseAppearAnimation=FALSE;
string sNewTag="";
object CreateObject(nObjectType,sTemplate,lLocation,bUseAppearAnimation,sNewTag);
}
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 là il n'arrive pas à le compiler et m'affiche :
creature01.nss(Cool : ERREUR : PARSING VARIBLE LIST

J'ai cru comprendre que ce type d'erreur était du à l'oubli de ";"...mais je crois pas en avoir oublié.

Quelqu'un pourrait t il m'aider ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Anthraxcite
Légende vivante
Inscrit le: 12 Juin 2004
Messages: 372
Localisation: Belgique
Répondre en citant
Posté le : 27/01/2006 14:41:26 Sujet du message :

Enleve juste le object devant le Create(c'est juste une indication qui sert si tu veux récupéré l'object dans une variable comme par exemple object o1 = Create...).
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger Ignorer l'utilisateur
 
MatMat
Voyageur
Inscrit le: 11 Déc 2005
Messages: 3
Répondre en citant
Posté le : 27/01/2006 14:51:51 Sujet du message :

Merci beaucoup ! C'était efffectivement ça qui clochait !
C'est vraiment cool de ta part
 
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 : 30/01/2006 14:56:33 Sujet du message :

heu ... ca marche pas avec une rencontre ?
un seul monstre dans la liste et nombre mini et maxi spawné=1
Sans doute l'astuce est de mettre un point de spawn

Sinon tu peux aussi faire une recherche sur "NPC Activities", un système très complet.

Ou utilisez ceci.
Note : j'utilise en conjonction avec mon éboueur de zone : GC, ce qui explique des lignes contenant PC_HERE, ly_onenter_area ou GCKILL. Tu peux les enlever.
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 :

//:: ////
//:: Created Lylver 2006-01-29, Lylver
//:: repris de Bouchon 6.67
//:: ////
//:: fichier include ly_lib_pnj.nss
//:: ////
/***************************** ******/
/* fonction : SpawnNewCreature    */
/*            par Ynot            */
/* Spawn une creature a un endroit */
/***************************** ******/

void SpawnPNJ(string sTag, string sArea="",int iloc=1,int iAction=1, string sNewTag = "")
{
  string sResRef = GetStringLowerCase(sTag); // TAG en majuscule, ResRef en Minuscule
  // cas standard : SP_<ResRef>_0&am p;lt;Action>
  int bNoMulti = FALSE ;
  if( sArea == "" ){
      bNoMulti = TRUE ;
      if( sNewTag == "" ) sArea = sResRef ;
      else sArea = sNewTag ;
  }
  // cas special, SP_<Area>_0& lt;Action>
  string sSpawnPoint = "SP_"+sArea+"_0"+ IntToString(iloc);
  object oSpawnPoint = GetObjectByTag(sSpawnPoint) ;
  // deja spawne la ?
  if( bNoMulti && GetIsObjectValid(GetNearestObjectByTag(sTag,oSpawnPoint)) ) return ;
  location lSpawn = GetLocation(oSpawnPoint) ;
  object oPNJ = CreateObject(OBJECT_TYPE_CREATURE, sResRef, lSpawn, FALSE, sNewTag);
  SetLocalInt(oPNJ,"GCKILL",TRUE) ; // nettoyage par GC
  switch( iAction ){
  case 6: AssignCommand(oPNJ, ActionAttack(GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC )));break;
  case 5: AssignCommand(oPNJ, ActionAttack(GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC,OBJECT_SELF ,1 ,CREATURE_TYPE_REPUTATION,REPUTATION_TYPE_ENEMY )));break;
  case 4: AssignCommand(oPNJ, ActionForceFollowObject(GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC ),2.0) );break;
  case 3: AssignCommand(oPNJ, PlayAnimation (ANIMATION_LOOPING_CONJURE1,1.0,30.0 ));break;
  case 2: AssignCommand(oPNJ, ActionRandomWalk());break;
  case 1: break;
  }
}
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.


exemple de script OnEnter pour une zone (origine Armada modifié)

NWScript :
//:: ////
//:: Updated 2006-01-29, Lylver
//:: ////
#include "ly_lib_pnj"
void main()
{
  // sipientalelis - plan d'ombre
  if( !GetLocalInt(OBJECT_SELF,"PC_HERE") ){
      SpawnPNJ("SIPI_MORTY");
      SpawnPNJ("SIPI_LEZEK");
      SpawnPNJ("SIPI_MARCHANDROW");
      SpawnPNJ("SIPI_OMBRE_ERRE");
      SpawnPNJ("SIPI_DRAG_ORACLE");
  }
  ExecuteScript("ly_onenter_area",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.

=> La zone en question est équipée de points de passage avec un tag de la forme "SP_<ResRef>_0<Type d'Action>"

Ynot avait dés 2004 inventé (?) un mini-NPC Activities

ou sur un déclencheur
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 :

//:: ////
//:: Update 2006-01-30, pour TNB2
//:: ////
/**************************
*  Spawn mob registry    *
*  par youry 13/05/04    *
*  pour "trigger" avec  *
*  pseudo hearth beat    *
**************************/

#include "ly_lib_pnj"
// cette fonction spawn des predateurs
void gardiensHostiles()
{
    string sArea = "7803" ;
    switch (d4())
    {
        case 1: ApplyEffectAtLocation( DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_IMPLOSION),
                  GetLocation(GetObjectByTag("SP_7803_03")) );
                SpawnPNJ("SIPI_ARCHIMAGE",sArea,3,5); // boss

        case 2: ApplyEffectAtLocation( DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_IMPLOSION),
                  GetLocation(GetObjectByTag("SP_7803_03")) );
                SpawnPNJ("SIPI_GUERRIER",sArea,3,6);
                SpawnPNJ("SIPI_GUERRIER",sArea,3,6);
                SpawnPNJ("SIPI_MAGE",sArea,3,6);

        case 3:case 4: ApplyEffectAtLocation( DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_IMPLOSION),
                          GetLocation(GetObjectByTag("SP_7803_02")) );
                SpawnPNJ("SIPI_PRETRE",sArea,1); // groupe de pretre
                ApplyEffectAtLocation( DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_FNF_IMPLOSION),
                  GetLocation(GetObjectByTag("SP_7803_01")) );
                SpawnPNJ("SIPI_PRETRE",sArea,2);

                break;
    }
}

// cette fonction spawn rote
void rothesHostiles()
{
    AssignCommand(GetNearestObjectByTag("caster409"),
      ActionCastSpellAtLocation(SPELL_EARTHQUAKE,
      GetLocation(GetObjectByTag("SP_7801_01"))));
    string sArea = "7801" ;
    switch (d4())
    {
        case 1: SpawnPNJ("SIPI_ROTHE",sArea,1,6);
                SpawnPNJ("SIPI_ROTHE",sArea,1,6);
        case 2: SpawnPNJ("SIPI_ROTHE",sArea,1,6);
                SpawnPNJ("SIPI_ROTHE",sArea,1,6);
        case 3: SpawnPNJ("SIPI_ROTHE",sArea,1,6);
                SpawnPNJ("SIPI_ROTHE",sArea,1,6);
        case 4: SpawnPNJ("SIPI_ROTHE",sArea,1,6);
                SpawnPNJ("SIPI_ROTHE",sArea,1,6);
                break;
    }
}
///////FIN des Bibliotheques////////////////

void main()
{
  object oSelf = OBJECT_SELF ;
  if( GetLocalInt(oSelf,"RESPWAIT") ) return ;
  SetLocalInt(oSelf,"RESPWAIT",TRUE) ;
  int nDelai = GetLocalInt(oSelf,"DELAI") ;
  if( nDelai = 0 ) nDelai = 24 ;
  DelayCommand(HoursToSeconds(nDelai),DeleteLocalInt(oSelf,"RESPWAIT"));
  object oArea = GetArea(OBJECT_SELF);
  int nArea = StringToInt(GetStringRight(GetTag(oArea),4));
  int nEnc = GetLocalInt(oArea,"ATAG") ;
  if( nEnc != nArea ){
      string sMesg = "tn_sipi_spawn : Area Tag differs from ATAG var : "+IntToString(nEnc) ;
      SendMessageToAllDMs(sMesg);
      WriteTimestampedLogEntry(sMesg);
      nEnc = nArea ;
  }
  switch( nEnc ){
      //sipientallis le temple de bahamut
      case 7803: gardiensHostiles();break;
      //sipientallis le plan d'ombre
      case 7801: rothesHostiles();break;
  }
}
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
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 06/02/2006 13:46:45 Sujet du message :

Système de remplacement pour les plaçables avec Heart-Beat

Voila un script à mettre sur le OnEnter d'un déclencheur,
ce déclencheur est à tracer autour des placables "ossements / NW_PL_SKELETON" et/ou "cadavres / NW_PL_ZOMBIE" habituels qui font apparaître un zombie/seigneur zombie ou un squelette/chef squelette

Bien entendu : enlever le script sur le heart-beat des plaçables ...

Avantages :
- Vous pouvez personnaliser le script et mettre ce que vous voulez comme placables et comme monstres, le nombre est choisi finement
- L'orientation des monstres dépend de celle du plaçable
- Le MD peut forcer l'apparition en sélectionnant "montrez les déclencheurs" et en envoyant un "évênement entrée"

Désavantages :
C'est plus lourd à fignoler qu'une rencontre avec un point de spawn.

NWScript :

//:: ////
//:: Created Lylver 2006-01-10, Remplacement de HB d'item placable
//:: But : baisse du lag, le trigger doit englober les placables
//:: Squelettes et zombies
//:: //
//:: Updated Lylver 2006-01-25
//:: Updated Lylver 2006-01-28, looplock
//:: ////
#include "ly_lib_time"
void CrUndead(object oSkel, int nType) ;

void main()
{
  object oPC = GetEnteringObject() ;
  object oSelf = OBJECT_SELF ;
  if( !( GetIsPC(oPC) || GetIsDM(oPC) || GetIsDMPossessed(oPC) ) ) return ;
  int nDelai = GetLocalInt(oSelf,"DELAI") ;
  if( nDelai == 0 ) nDelai = 24 ;
  // check if nDelai has elapsed
  int iCDay = ly_day() ;
  int iCTime = ly_time() ;
  int iRespDay = GetLocalInt(oSelf, "RESPDAY");
  int iRespSec = GetLocalInt(oSelf, "RESPTIME") ;
  int iRespDelay = iCTime - iRespSec + FloatToInt(HoursToSeconds((iCDay - iRespDay) * 24));
  if( iRespDelay >= FloatToInt(HoursToSeconds(nDelai)) ){
      // nDelai has elapsed
      DeleteLocalInt(oSelf,"RESPWAIT") ;
  }
  if( GetLocalInt(oSelf,"RESPWAIT") && !(GetIsDM(oPC) || GetIsDMPossessed(oPC)) ){
      return ;
  }else{
      if( GetIsDM(oPC) || GetIsDMPossessed(oPC) ){
        SendMessageToAllDMs("DM Click on trigger");
        if( GetLocalInt(oSelf,"RESPWAIT") ){
            DeleteLocalInt(oSelf,"RESPWAIT") ;
            SendMessageToAllDMs("Trigger Unlocked");
            return ;
        }
      }
      // Il y a plus propre avec la bibli de temps
      // Mise a jour des variables memorisant le temps du dernier spawn
      SetLocalInt(oSelf, "RESPWAIT", TRUE); // Lock
      SetLocalInt(oSelf, "RESPDAY", iCDay); // Lock Time
      SetLocalInt(oSelf, "RESPTIME", iCTime);
      SendMessageToAllDMs("Trigger Locked for "+IntToString(nDelai)+" Hours");
  }
  object oSkel = GetFirstInPersistentObject(oSelf, OBJECT_TYPE_PLACEABLE) ;
  while( GetIsObjectValid(oSkel) ){
      if( !GetLocalInt(oSkel,"LOOPLOCK") ){
        if( GetTag(oSkel) == "NW_PL_ZOMBIE" ) CrUndead(oSkel,1) ;
        if( GetTag(oSkel) == "NW_PL_SKELETON" ) CrUndead(oSkel,2) ;
      }
      oSkel = GetNextInPersistentObject(oSelf, OBJECT_TYPE_PLACEABLE) ;
  }
  oSkel = GetFirstInPersistentObject(oSelf, OBJECT_TYPE_PLACEABLE) ;
  while( GetIsObjectValid(oSkel) ){
      DeleteLocalInt(oSkel,"LOOPLOCK");
      oSkel = GetNextInPersistentObject(oSelf, OBJECT_TYPE_PLACEABLE) ;
  }
}

void CrUndead(object oUndead, int nType)
{
  effect eMind = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);
  string sCreature ;
  SetLocalInt(oUndead,"LOOPLOCK",TRUE) ;
  switch( nType ){
  case 1:
      sCreature = "NW_ZOMBWARR01";
      // * 10% chance of a zombie lord instead
      if( Random(100) > 90 ){
        sCreature = "NW_ZOMBIEBOSS";
      }
      break ;
  case 2: default:
      sCreature = "sow_sque_wa2"; // SOW_SQUE_WA2 &lt;-&gt; NW_SKELWARR01
      // * 10% chance of a skeleton chief instead
      if( Random(100) > 90 ){
        sCreature = "NW_SKELCHIEF";
      }
      break ;
  }
  object oMonster = CreateObject(OBJECT_TYPE_CREATURE, sCreature, GetLocation(oUndead));
  DelayCommand(0.3,ApplyEffectToObject(DURATION_TYPE_INSTANT, eMind, oMonster));
}
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
 
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 63.921ms