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


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Orkamungus
Acolyte
Inscrit le: 11 Nov 2006
Messages: 36
Répondre en citant
Posté le : 10/12/2006 14:52:40 Sujet du message : S'assoir sur un banc en tenant compte de la position du pc

Bonjour à tous et toutes.

Voila, je suis en train de cherche un script pour s'assoir sur un banc peu basique. En fait, ce que je voudrais, c'est que quand le PC arrive par devant, il s'assoie devant, s'il arrive par derrière, il s'assoie derrière.

En fait ce serait
de 89° à 170°, il s'assoie devant.
de 90° à 171°, il s'assoie derrière.

Je veux pas un script tout fait mais juste les fonctions à utiliser si quelqu'un à une idée.

Merci, @ bientot.
Orkamungus.
Dernière édition par Orkamungus le 13/12/2006 12:49:57; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
AZAZEL11
Seigneur
Inscrit le: 08 Fév 2006
Messages: 156
Répondre en citant
Posté le : 12/12/2006 04:33:28 Sujet du message :

hmmmm, sans être un pro je te dirais que la seule facon de faire serait de mettre 2 WP (avant et arrière) et d'y mettre la condition du WP le plus proche du pj, ce qui déterminerait l'orientation du pj lorsqu'il s'assit.

Cependant, je ne dit pas qu'il n'y a pas d'autres facons, mais celle là en est une, enfin je crois.
_________________
L'imagination est plus importante que le savoir. (Albert Einstein)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Orkamungus
Acolyte
Inscrit le: 11 Nov 2006
Messages: 36
Répondre en citant
Posté le : 12/12/2006 17:45:06 Sujet du message :

Salut et merci pour ta réponse.

Oui, ca semble être une option, j'essayer de faire avec des vectors mais je me suis cassé la tête dessus. Je vais voir pour cette option et je mettrai des commentaires pour dire l'avancée du script.

Merci, @+
Orkamungus
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Orkamungus
Acolyte
Inscrit le: 11 Nov 2006
Messages: 36
Répondre en citant
Posté le : 12/12/2006 21:12:51 Sujet du message :

Bon j'ai fait ca, et ca marche.

Donc en fait il faut faire un objet invisible ayant la possition INVERSE au sens du banc avec comme tag "ARRIERE".

script a mettre dans le OnClik.

NWScript :
void main()
{
    object oPC = GetPlaceableLastClickedBy();
    object oFace = OBJECT_SELF;
    object oDos = GetNearestObjectByTag ("ARRIERE");

    if(GetDistanceBetween(oPC, oFace)<GetDistanceBetween(oPC, oDos)
    && GetSittingCreature(oFace)==OBJECT_INVALID)

    {
    AssignCommand(oPC,ActionSit(oFace));
    }
    if(GetDistanceBetween(oPC, oDos)<GetDistanceBetween(oPC, oFace)
    && GetSittingCreature(oDos)==OBJECT_INVALID)
    {
    AssignCommand(oPC, ClearAllActions());
    AssignCommand(oPC,ActionSit(oDos));
    }
}
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.

Voila, j'apporterai des modifs pour améliorer le script pour qu'il n'y ait pas besoin de mettre d'objet en plus que le banc, cependant est ce que tu sais comment faire pour faire pivoter un objet ?

Merci pour ton aide et à bientôt.
Orkamungus.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
AZAZEL11
Seigneur
Inscrit le: 08 Fév 2006
Messages: 156
Répondre en citant
Posté le : 13/12/2006 04:44:15 Sujet du message :

voici le void du set du dmfi, la partie qui concerne les placeable qu'on peut faire pivoter

attention, le placeable ne doit pas être statique!!!


NWScript :
void RotateMe(object oTarget, int Amount, object oUser)
{
            location lLocation = GetLocation (oTarget);
            if (GetObjectType(oTarget) != OBJECT_TYPE_PLACEABLE)
                {
                oTarget = GetNearestObject(OBJECT_TYPE_PLACEABLE, oUser);
                FloatingTextStringOnCreature("c'est un placeable static ou pas de placeables disponibles " ,oUser ); }
            if (Amount == -2)
                {

                AssignCommand(oTarget, SetFacing(90.0));///
                return;
                }
            if (Amount == -1)
                {
                AssignCommand(oTarget, SetFacing(0.0));
                return;
                }
            if (GetIsObjectValid(oTarget))
                AssignCommand(oTarget, SetFacing(GetFacing(oTarget)+Amount));
}



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.

_________________
L'imagination est plus importante que le savoir. (Albert Einstein)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Orkamungus
Acolyte
Inscrit le: 11 Nov 2006
Messages: 36
Répondre en citant
Posté le : 13/12/2006 11:57:29 Sujet du message :

Salut;

J'ai fait un deuxième script pour qu'il n'y ait besoin de placer que le banc. L'objet apparaît bien (celui qui serat dans la dirrection opposée au banc), seul bémol : le pc ne s'assoie ni d'un côté, ni de l'autre. Je continue à chercher la solution mais elle n'arrive pas. -C'est bon, j'ai trouvé. pour le script voir poste suivant.-

Je poste le script pour voir si tu as une idée d'où ca pourrait provenir et je continue mon travail.

NWScript :
void main()
{
    object oPC = GetPlaceableLastClickedBy();
    object oFace = OBJECT_SELF;
    object oDos = GetLocalObject(OBJECT_SELF,"ARRIERE");

    if(oDos==OBJECT_INVALID)
    {

    object oArea = GetArea(OBJECT_SELF);
    vector vBanc = GetPosition(OBJECT_SELF);
    float fOrient = GetFacing(OBJECT_SELF);

    oDos = CreateObject(OBJECT_TYPE_PLACEABLE,
    "arriere_sit",Location(oArea,vBanc, fOrient), FALSE);

    SetLocalObject(OBJECT_SELF,"ARRIERE",oDos);
    AssignCommand (oDos, SetFacing(fOrient+180));

    }
    else if(GetDistanceBetween(oPC, oFace)<GetDistanceBetween(oPC, oDos)
    && GetSittingCreature(oFace)==OBJECT_INVALID)

    {
    AssignCommand(oPC,ActionSit(oFace));
    }
    else if(GetDistanceBetween(oPC, oDos)<GetDistanceBetween(oPC, oFace)
    && GetSittingCreature(oDos)==OBJECT_INVALID)
    {
    AssignCommand(oPC, ClearAllActions());
    AssignCommand(oPC,ActionSit(oDos));
    }
}
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.


Merci encore pour ton aide et à bientôt.
Orkamungus

EDIT : J'ai pas utilisé le void que tu as posté, j'ai trouvé le moyen de faire pivoter l'objet.
Dernière édition par Orkamungus le 13/12/2006 12:44:39; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Orkamungus
Acolyte
Inscrit le: 11 Nov 2006
Messages: 36
Répondre en citant
Posté le : 13/12/2006 12:08:29 Sujet du message :

Les deux places étant au même endroit, le pc n'arrive pas à se décider !

Donc voici le script. J'en ai profité pour l'améliorer car si il y a déjà quelqu'un d'assis si le pc clique sur le banc, il a moyen de s'assoir de l'autre côté, et ca fait très bizard... Donc j'ai corrigé ça et tout marche à merveille.

Voici le script, à placer dans le OnClick du banc.

NWScript :
void main()
{
    object oPC = GetPlaceableLastClickedBy();
    object oFace = OBJECT_SELF;
    object oDos = GetLocalObject(OBJECT_SELF,"ARRIERE");

    if(oDos==OBJECT_INVALID)
    {

    object oArea = GetArea(OBJECT_SELF);
    vector vBanc = GetPosition(OBJECT_SELF);
    float fOrient = GetFacing(OBJECT_SELF);

    oDos = CreateObject(OBJECT_TYPE_PLACEABLE,
    "plc_invisobj",Location(oArea,vBanc + AngleToVector(fOrient+1.0f)/10.0f,fOrient),FALSE);

    SetLocalObject(OBJECT_SELF,"ARRIERE",oDos);
    AssignCommand (oDos, SetFacing(fOrient+180));

    }
    if(GetIsObjectValid(GetSittingCreature(oFace)))
    {
    AssignCommand(oPC, ClearAllActions());
    }

    if(GetIsObjectValid(GetSittingCreature(oDos)))
    {
    AssignCommand(oPC, ClearAllActions());
    }

    if(GetDistanceBetween(oPC, oFace)<GetDistanceBetween(oPC, oDos)
    && GetSittingCreature(oFace)==OBJECT_INVALID
    && GetSittingCreature(oDos) == OBJECT_INVALID)

    {
    AssignCommand(oPC,ActionSit(oFace));
    }

    if(GetDistanceBetween(oPC, oDos)<GetDistanceBetween(oPC, oFace)
    && GetSittingCreature(oDos)==OBJECT_INVALID
    && GetSittingCreature(oFace) == OBJECT_INVALID)
    {
    AssignCommand(oPC, ClearAllActions());
    AssignCommand(oPC,ActionSit(oDos));
    }
}
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.


Voila, @+.
Orkamungus
 
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 41.062ms