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 22:34:30


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
yellow submarine
Grand Chevalier
Inscrit le: 24 Oct 2003
Messages: 143
Répondre en citant
Posté le : 17/12/2003 09:38:08 Sujet du message : Sac de couchage et temps souhaité de repos

salut

l' Idea du jour

qui n'a pas pesté d'attendre une heure précise pour faire une action (moi bien sur) Smile

donc j'ai fait un objet : sac de couchage (Propriété : Lancer un sort, pouvoir unique)

un dialogue pour dormir X heures et les scripts qui vont avec.
ca fonctionne sur un lit par exemple (bon le PJ dort toujours à côté du lit mais ca fonctionne) Surprised

maintenant l'idée c'est que dans certaines zones seulement, on puisse utiliser le sac de couchage
(le rêve ce serait de pouvoir le concrétiser sur le sol et dormir dessus)

la question est :

quel script mettre dans OnEnter de la zone

amicalement
_________________
Rien ne vaut la recherche lorsqu'on veut trouver quelque chose.

[J. R. R. Tolkien]
 
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 : 17/12/2003 14:06:33 Sujet du message :

Dans l'événement 'OnActivateItem' (petit EDIT Very Happy) du module :
NWScript :

#include "nw_i0_2q4luskan"

void main()
{
object oItem = GetItemActivated();
object oPC = GetItemActivator();
if(GetTag(oItem)=="sacdecouchageinv")
{
if(GetLocalInt(oPC, "sacdecouchage")==1)
{
AssignCommand(oPC, PlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 2.0));
DelayCommand(2.0, CreateObjectVoid(OBJECT_TYPE_PLACEABLE, "sacdecouchage", GetLocation(oPC)));
DestroyObject(oItem);
}
else
{
SendMessageToPC(oPC, "Vous ne pouvez pas utiliser votre sac de couchage ici.");
}
}
}
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.


Créé un "plaçable" à l'apparence d'un lit de camp (tag et blueprint 'sacdecouchage') et un objet d'inventaire de tag et blueprint 'sacdecouchageinv'. Dans le OnEnter de toute zone où le sac de couchage est permis :
NWScript :

SetLocalInt(GetFirstPC(), "sacdecouchage", 1);
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 dans celui des zones où le sac de couchage est interdit :
NWScript :

SetLocalInt(GetFirstPC(), "sacdecouchage", 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.


Enfin, donne un dialogue à ton sac de couchage "plaçable" dans lequel ou peut soit choisir de reprendre son sac de couchage, soit de dormir.
_________________
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.
Dernière édition par Lavok le 17/12/2003 14:20:18; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
yellow submarine
Grand Chevalier
Inscrit le: 24 Oct 2003
Messages: 143
Répondre en citant
Posté le : 17/12/2003 14:16:53 Sujet du message :

encore et encore merci

mais avec moi tu n'as pas fini Very Happy

dans mon OnActivateItem du module (je pense que c'est de cela dont tu parles)
j'ai déjà ce script (pierre de rappel)

NWScript :

      void main()
{
  object oItem=GetItemActivated();
  object oActivator=GetItemActivator();

  if(GetTag(oItem)=="DMsHelper")
  {
      if(GetIsDM(oActivator) != TRUE)
      {
        SendMessageToPC(oActivator,"You are mortal and this is not yours!");
        DestroyObject(oItem);
        return;
      }
      // get the wand's activator and target, put target info into local vars on activator
      object oMyActivator = GetItemActivator();
      object oMyTarget = GetItemActivatedTarget();
      SetLocalObject(oMyActivator, "dmwandtarget", oMyTarget);
      location lMyLoc = GetItemActivatedTargetLocation();
      SetLocalLocation(oMyActivator, "dmwandloc", lMyLoc);

      //Make the activator start a conversation with itself
      AssignCommand(oMyActivator, ActionStartConversation(oMyActivator, "dmwand", TRUE));
      return;
  }

  if(GetTag(oItem)=="AutoFollow")
  {
      object oTarget = GetItemActivatedTarget();

      if(GetIsObjectValid(oTarget))
      {
        AssignCommand ( oActivator, ActionForceFollowObject(oTarget));
      }
      return;
  }

if(GetTag(oItem) == "NW_IT_RECALL")
{
  location LastRecallUsed; //Set the location variable
  LastRecallUsed = GetLocation(GetItemActivator()); //Get the location, fill up the variable
  SetLocalLocation(GetItemActivator(),"LastRecallUsed",LastRecallUsed); // Set where the portal jump the player to
  SetLocalInt(GetItemActivator(),"HasRecalled",1); // To make the recall poretal tells the player if he want to go back
  ActionCastFakeSpellAtObject ( SPELL_DISMISSAL , GetItemActivator());
  DelayCommand (0.5,
  AssignCommand(GetItemActivator(),
  JumpToLocation(GetLocation(GetObjectByTag("portail_pierre"))))); // Get the player to the temple

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


ma question comment faire pour réunir les deux?

amicalement
_________________
Rien ne vaut la recherche lorsqu'on veut trouver quelque chose.

[J. R. R. Tolkien]
 
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 : 17/12/2003 14:25:19 Sujet du message :

Fusion Cool :
NWScript :

#include "nw_i0_2q4luskan"

void main()
{
object oItem = GetItemActivated();
object oActivator = GetItemActivator();
if(GetTag(oItem)=="sacdecouchageinv")
{
if(GetLocalInt(oActivator, "sacdecouchage")==1)
{
AssignCommand(oActivator, PlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 2.0));
DelayCommand(2.0, CreateObjectVoid(OBJECT_TYPE_PLACEABLE, "sacdecouchage", GetLocation(oActivator)));
DestroyObject(oItem);
}
else
{
SendMessageToPC(oActivator, "Vous ne pouvez pas utiliser votre sac de couchage ici.");
}
}


if(GetTag(oItem)=="DMsHelper")
{
if(GetIsDM(oActivator) != TRUE)
{
SendMessageToPC(oActivator,"You are mortal and this is not yours!");
DestroyObject(oItem);
return;
}
// get the wand's activator and target, put target info into local vars on activator
object oMyActivator = GetItemActivator();
object oMyTarget = GetItemActivatedTarget();
SetLocalObject(oMyActivator, "dmwandtarget", oMyTarget);
location lMyLoc = GetItemActivatedTargetLocation();
SetLocalLocation(oMyActivator, "dmwandloc", lMyLoc);

//Make the activator start a conversation with itself
AssignCommand(oMyActivator, ActionStartConversation(oMyActivator, "dmwand", TRUE));
return;
}

if(GetTag(oItem)=="AutoFollow")
{
object oTarget = GetItemActivatedTarget();

if(GetIsObjectValid(oTarget))
{
AssignCommand ( oActivator, ActionForceFollowObject(oTarget));
}
return;
}

if(GetTag(oItem) == "NW_IT_RECALL")
{
location LastRecallUsed; //Set the location variable
LastRecallUsed = GetLocation(GetItemActivator()); //Get the location, fill up the variable
SetLocalLocation(GetItemActivator(),"LastRecallUsed",LastRecallUsed); // Set where the portal jump the player to
SetLocalInt(GetItemActivator(),"HasRecalled",1); // To make the recall poretal tells the player if he want to go back
ActionCastFakeSpellAtObject ( SPELL_DISMISSAL , GetItemActivator());
DelayCommand (0.5,
AssignCommand(GetItemActivator(),
JumpToLocation(GetLocation(GetObjectByTag("portail_pierre"))))); // Get the player to the temple
}
}
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
 
yellow submarine
Grand Chevalier
Inscrit le: 24 Oct 2003
Messages: 143
Répondre en citant
Posté le : 17/12/2003 14:48:49 Sujet du message :

chapeau bas Cool

ça fonctionne Very Happy


Lavok a écrit :

Enfin, donne un dialogue à ton sac de couchage "plaçable" dans lequel ou peut soit choisir de reprendre son sac de couchage, soit de dormir.

quand tu dis reprendre c'est : le détruire Laughing

amicalement
_________________
Rien ne vaut la recherche lorsqu'on veut trouver quelque chose.

[J. R. R. Tolkien]
 
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 : 17/12/2003 14:58:47 Sujet du message :


yellow submarine a écrit :
quand tu dis reprendre c'est : le détruire Laughing
Plus précisément, voici le script exact en action conséquente de cette réplique du "dialogue" :
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.

_________________
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
 
yellow submarine
Grand Chevalier
Inscrit le: 24 Oct 2003
Messages: 143
Répondre en citant
Posté le : 17/12/2003 15:34:06 Sujet du message :

C'est top ! et en plus ça de la classe...

amicalement
_________________
Rien ne vaut la recherche lorsqu'on veut trouver quelque chose.

[J. R. R. Tolkien]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
yellow submarine
Grand Chevalier
Inscrit le: 24 Oct 2003
Messages: 143
Répondre en citant
Posté le : 17/12/2003 16:27:42 Sujet du message :

Pour les feignassous ça existe (heu moi)

j'ai retiré dans le script du module :

NWScript :

if(GetLocalInt(oActivator, "sacdecouchage")==1)
{

/* warning: 1 unclosed block {} */
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 je coche seulement dans les zones ou il ne peut pas dormir la case : Pas de repos

et les deux scripts relatifs à la condition ne sont plus utiles Cool

encore merci

amicalement
_________________
Rien ne vaut la recherche lorsqu'on veut trouver quelque chose.

[J. R. R. Tolkien]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
yellow submarine
Grand Chevalier
Inscrit le: 24 Oct 2003
Messages: 143
Répondre en citant
Posté le : 18/12/2003 15:55:49 Sujet du message :

Monsieur plus

je veux placer à côté du sac de couchage un feu de camp
en "arrangeant" le script plus haut, j'arrive à créer mon feu de camp
mais bien sur je n'ai pas la solution pour qu'il soit à côté du sac et non dessus Confused

quelle est l'amélioration à :
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.


les ???? étant mon ignorance Sad

amicalement
_________________
Rien ne vaut la recherche lorsqu'on veut trouver quelque chose.

[J. R. R. Tolkien]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 18/12/2003 17:51:36 Sujet du message :


yellow submarine a écrit :
Monsieur plus

je veux placer à côté du sac de couchage un feu de camp
en "arrangeant" le script plus haut, j'arrive à créer mon feu de camp
mais bien sur je n'ai pas la solution pour qu'il soit à côté du sac et non dessus Confused

quelle est l'amélioration à :
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.


les ???? étant mon ignorance Sad

amicalement
Il suffit de calculer une nouvelle position à partir des coordonnées du sac une fois posé.
En partant du principe que tu disposes d'un objet oSac, on va essayer de calculer une location qui soit à 1 mètre à la droite ou à la gauche de la tête du sac (note que je ne sais pas trop ou est le point de référence du sac, c'est-à-dire comment le sac est placé autour de sa loc, mais en ajustant quelques paramètre, il doit y avoir moyens d'arriver à ses fins) :
NWScript :


float fAngle = 90.0;
float fDist = 1.0;

//Rassembler les informations de la position du sac
location lLocSac = GetLocation(oSac);
object oArea = GetAreaFromLocation(lLocSac);
vector vPos = GetPositionFromLocation(lLocSac);
float fFacing = GetFacingFromLocation(lLocSac);

//Rassembler les informations de la nouvelle position
float fNewFacing = fFacing + fAngle;
if (fNewFacing > 360.0)
{
  fNewFacing = fNewFacing - 360.0;
}
else if (fNewFacing < 0.0)
{
  fNewFacing = fNewFacing + 360.0;
}
float fNexX = vPos.x + fDist * cos(fNewFacing);
float fNewY = vPos.y + fDist * sin(fNewFacing);
vector vNewPos = Vector(fNewX, fNewY, vPos.z);

//Construction de la nouvelle Loc
location lNewLoc = Location(oArea, vNewPos, fNewFacing);
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.

lNewLoc est la location à utiliser.
Je n'ai pas testé. Fais-moi savoir si c'est bon ou s'il faut ajuster quelque chose.
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
yellow submarine
Grand Chevalier
Inscrit le: 24 Oct 2003
Messages: 143
Répondre en citant
Posté le : 19/12/2003 08:29:54 Sujet du message :

bonjour

lendraste a écrit :

Je n'ai pas testé. Fais-moi savoir si c'est bon ou s'il faut ajuster quelque chose
après rectif : vector vNewPos = Vector(fNexX, fNewY, vPos.z);

j'ai quand même une erreur, mais comme tu ne m'as tout maché le travail... c'est moi qui ai surement rien compris. Mad

donc j'ai mis la variable ici :
DelayCommand(3.0, CreateObjectVoid(OBJECT_TYPE_PLACEABLE, "feudecamp",GetLocation(lNewLoc)));
et j'ai l'erreur : DECLARATION DOES NOT MATCH PARAMETERS

merci de ton aide

amicalement
_________________
Rien ne vaut la recherche lorsqu'on veut trouver quelque chose.

[J. R. R. Tolkien]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 19/12/2003 08:40:43 Sujet du message :

Il ne faut pas faire un GetLocation(lNewLoc) puisque que lNewLoc est déjà une location. GetLocation sert à connaître la location de n'importe quel objet du module et son paramètre est donc un objet. DECLARATION DOES NOT MATCH PARAMETERS indique que la fonction attend un paramètre objet et que tu lui fournis une localisation.
Ta commande devient donc :
Code :

DelayCommand(3.0, CreateObjectVoid(OBJECT_TYPE_PLACEABLE, "feudecamp",lNewLoc));


[EDIT]PS : désolé pour la faute de frappe. Mais pour rester cohérent, il valait mieux changer la déclaration de fNexX en fNewX ("new" signifiant nouveau). Cela n'a toutefois aucune incidence sur le calcul et la création de cette location
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
yellow submarine
Grand Chevalier
Inscrit le: 24 Oct 2003
Messages: 143
Répondre en citant
Posté le : 19/12/2003 09:18:52 Sujet du message :

C'est top ! Merci encore Lendraste

j'ai fait les rectifs (fNewX aussi, pour la cohérence)
et c'est super Very Happy

amicalement

Je profite pour souhaiter à tout le Forum de superbes fêtes de fin d'année Santa Grins
car Cool Ce soir je suis en vacances pour 15 jours Cool

Longue vie au Forum et à ceux qui l'animent.
_________________
Rien ne vaut la recherche lorsqu'on veut trouver quelque chose.

[J. R. R. Tolkien]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
yellow submarine
Grand Chevalier
Inscrit le: 24 Oct 2003
Messages: 143
Répondre en citant
Posté le : 19/12/2003 09:56:45 Sujet du message :

Je suis encore là Very Happy

Tout fonctionne mais voilà (d'accord ce n'est qu'un détail):

Le PJ s'assoie sur le sac de couchage (à condition qu'il reste dessus)
mais les pieds à la tête

ma question : il y a-t-il un moyen d'orienter le sac de couchage?

amicalement
_________________
Rien ne vaut la recherche lorsqu'on veut trouver quelque chose.

[J. R. R. Tolkien]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 19/12/2003 10:45:12 Sujet du message :


yellow submarine a écrit :
ma question : il y a-t-il un moyen d'orienter le sac de couchage?
Et bien oui. Il semble qu'il faille effectuer un calcul sur la position du sac également et non pas se contenter de lui donner la location du PJ. Notamment, si le PJ n'est pas déplacé pendant l'opération de mise en place du sac, il faut faire subir à celui-ci une rotation de 180 degré.
Le principe de calcul est très similaire à celui que j'ai déjà donné. Voici globalement ce que ça donnerait si l'on veux que le calcul de la position du feu de camp continue à donner le même résultat (Hypothèse : oPC est un objet représentant le PJ) :
NWScript :


float fRot = 180.0;
float fAngle = 90.0;
float fDist = 1.0;

//Rassembler les informations de la position du PJ
location lLocPJ = GetLocation(oPC);
object oArea = GetAreaFromLocation(lLocPJ);
vector vPosSac = GetPositionFromLocation(lLocPJ);
float fFacingSac = GetFacingFromLocation(lLocPJ);

//Nouvelle orientation du sac
fFacingSac = fFacingSac + fRot;
if (fFacingSac > 360.0)
{
  fFacingSac = fFacingSac - 360.0;
}
else if (fFacingSac < 0.0)
{
  fFacingSac = fFacingSac + 360.0;
}


location lLocSac = Location(oArea, vPosSac, fFacingSac);

//Rassembler les informations de la nouvelle position pour le feu de camp
float fNewFacing = fFacingSac + fAngle;
if (fNewFacing > 360.0)
{
  fNewFacing = fNewFacing - 360.0;
}
else if (fNewFacing < 0.0)
{
  fNewFacing = fNewFacing + 360.0;
}
float fNewX = vPosSac.x + fDist * cos(fNewFacing);
float fNewY = vPosSac.y + fDist * sin(fNewFacing);
vector vNewPos = Vector(fNewX, fNewY, vPosSac.z);

//Construction de la Loc du feu de camp
location lNewLoc = Location(oArea, vNewPos, fNewFacing);
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.


De cette façon tu utilises lLocSac et lNewLoc pour le Sac et le Feu de camp respectivement.
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
yellow submarine
Grand Chevalier
Inscrit le: 24 Oct 2003
Messages: 143
Répondre en citant
Posté le : 19/12/2003 13:35:44 Sujet du message :


lendraste a écrit :
(Hypothèse : oPC est un objet représentant le PJ)
le script étant dans le OnActivateItem (du module)

que mettre pour déclarer OBJECT oPC =

amicalement
_________________
Rien ne vaut la recherche lorsqu'on veut trouver quelque chose.

[J. R. R. Tolkien]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 19/12/2003 13:55:27 Sujet du message :

Il a été cité dans le script de Lavok :
Code :

object oActivator = GetItemActivator();


Tu l'appelles oActivator ou oPC à ta convenance, quoi qu'il faille quand même vérifier si l'activateur de l'objet est bien un PJ (GetIsPC)
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
yellow submarine
Grand Chevalier
Inscrit le: 24 Oct 2003
Messages: 143
Répondre en citant
Posté le : 19/12/2003 14:00:14 Sujet du message :

OK
maintenant c'est à la ligne

object oArea = GetAreaFromLocation(lLocPJ); que j'ai l'erreur :

VARIABLE ALREADY USED WITHIN SCOPE

(je pense que tu vas être content que je perte en vacances Very Happy )

amicalement
_________________
Rien ne vaut la recherche lorsqu'on veut trouver quelque chose.

[J. R. R. Tolkien]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lendraste
Grand Maître Chanteur du Conseil
Inscrit le: 20 Fév 2003
Messages: 1403
Localisation: Quelque part ailleurs
Répondre en citant
Posté le : 19/12/2003 15:04:36 Sujet du message :


yellow submarine a écrit :

object oArea = GetAreaFromLocation(lLocPJ); que j'ai l'erreur :

VARIABLE ALREADY USED WITHIN SCOPE
J'espère que tu n'as pas concaténé mon second script avec le premier. Car le second doit en fait remplacer le premier. De plus ce n'est qu'un bout du script et non le script en entier (car je n'ai pas suivi dans le détail toutes les propositions évoquées avant mon intervention).
Autrement dit, il faudrait que tu réaffiches le script en entier pour voir ce qui peut clocher, mais je dirais que oArea a été déclaré deux fois et je suppose que c'est parce que tu as mal fusionné les différentes propositions.


Citation :

(je pense que tu vas être content que je perte en vacances Very Happy )
Bah, quelle importance... Je suis en vacances ce soir moi aussi Mr. Green
_________________
Lendraste de Loreval
Qui cherche la Vérité cherche celui qui la détient, car elle n'existe pas à l'état naturel.
La cité des mensonges - 1
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Numéro ICQ Ignorer l'utilisateur
 
yellow submarine
Grand Chevalier
Inscrit le: 24 Oct 2003
Messages: 143
Répondre en citant
Posté le : 05/01/2004 13:51:32 Sujet du message :

Bonjour à tous et très très bonne année



lendraste a écrit :

Autrement dit, il faudrait que tu réaffiches le script en entier pour voir ce qui peut clocher, mais je dirais que oArea a été déclaré deux fois et je suppose que c'est parce que tu as mal fusionné les différentes propositions.
voilà le script en entier (il y a une partie qui concerne le script pierre de rappel, et trackinkit)

NWScript :


#include "nw_i0_2q4luskan"

void main()
{
object oItem = GetItemActivated();
object oActivator = GetItemActivator();
    object oTarget = GetItemActivatedTarget();

if(GetTag(oItem)=="sacdecouchageinv")
{
//if(GetLocalInt(oActivator, "sacdecouchage")==1)
//{



float fRot = 180.0;
float fAngle = 90.0;
float fDist = 1.0;

//Rassembler les informations de la position du PJ
location lLocPJ = GetLocation(oActivator);
object oArea = GetAreaFromLocation(lLocPJ);
vector vPosSac = GetPositionFromLocation(lLocPJ);
float fFacingSac = GetFacingFromLocation(lLocPJ);

//Nouvelle orientation du sac
fFacingSac = fFacingSac + fRot;
if (fFacingSac > 360.0)
{
  fFacingSac = fFacingSac - 360.0;
}
else if (fFacingSac < 0.0)
{
  fFacingSac = fFacingSac + 360.0;
}


location lLocSac = Location(oArea, vPosSac, fFacingSac);

//Rassembler les informations de la nouvelle position pour le feu de camp
float fNewFacing = fFacingSac + fAngle;
if (fNewFacing > 360.0)
{
  fNewFacing = fNewFacing - 360.0;
}
else if (fNewFacing < 0.0)
{
  fNewFacing = fNewFacing + 360.0;
}
float fNewX = vPosSac.x + fDist * cos(fNewFacing);
float fNewY = vPosSac.y + fDist * sin(fNewFacing);
vector vNewPos = Vector(fNewX, fNewY, vPosSac.z);

//Construction de la Loc du feu de camp
location lNewLoc = Location(oArea, vNewPos, fNewFacing);


AssignCommand(oActivator, PlayAnimation(ANIMATION_LOOPING_GET_LOW, 1.0, 2.0)); //ANIMATION_LOOPING_GET_MID
DelayCommand(2.0, CreateObjectVoid(OBJECT_TYPE_PLACEABLE, "sacdecouchage", lLocSac));
DelayCommand(3.0, CreateObjectVoid(OBJECT_TYPE_PLACEABLE, "feudecamp",lNewLoc));

DestroyObject(oItem);
}
else
{
SendMessageToPC(oActivator, "Vous ne pouvez pas utiliser votre sac de couchage ici.");
}
//}
                    //trackinkit
  object oUser = GetItemActivator();
    string sItemTag = GetTag(GetItemActivated());


    if (sItemTag == "TrackingKit")
    {
        ExecuteScript("ranger_tracking", oUser);
        return;
    }

            // fin


if(GetTag(oItem)=="DMsHelper")
{
if(GetIsDM(oActivator) != TRUE)
{
SendMessageToPC(oActivator,"You are mortal and this is not yours!");
DestroyObject(oItem);
return;
}
// get the wand's activator and target, put target info into local vars on activator
object oMyActivator = GetItemActivator();
object oMyTarget = GetItemActivatedTarget();
SetLocalObject(oMyActivator, "dmwandtarget", oMyTarget);
location lMyLoc = GetItemActivatedTargetLocation();
SetLocalLocation(oMyActivator, "dmwandloc", lMyLoc);

//Make the activator start a conversation with itself
AssignCommand(oMyActivator, ActionStartConversation(oMyActivator, "dmwand", TRUE));
return;
}

if(GetTag(oItem)=="AutoFollow")
{
object oTarget = GetItemActivatedTarget();

if(GetIsObjectValid(oTarget))
{
AssignCommand ( oActivator, ActionForceFollowObject(oTarget));
}
return;
}

if(GetTag(oItem) == "NW_IT_RECALL")
{
location LastRecallUsed; //Set the location variable
LastRecallUsed = GetLocation(GetItemActivator()); //Get the location, fill up the variable
SetLocalLocation(GetItemActivator(),"LastRecallUsed",LastRecallUsed); // Set where the portal jump the player to
SetLocalInt(GetItemActivator(),"HasRecalled",1); // To make the recall poretal tells the player if he want to go back
ActionCastFakeSpellAtObject ( SPELL_DISMISSAL , GetItemActivator());
DelayCommand (0.5,
AssignCommand(GetItemActivator(),
JumpToLocation(GetLocation(GetObjectByTag("portail_pierre"))))); // Get the player to the temple
}
}
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 n'ai plus d'erreur de compil Very Happy

mais si le PJ s'éloigne du sac avant de revenir pour dormir => il dort à côté du sac Mad Mad Mad

amicalement et encore bonne année à toi
_________________
Rien ne vaut la recherche lorsqu'on veut trouver quelque chose.

[J. R. R. Tolkien]
 
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 93.746ms