Login: Pass:
Alia Atreides



Inscrit le: 20 Nov 2006
Messages: 26
Message Posté le: 21/11/2006 14:09 Sujet du message: [Script] Assoire un PJ et un PNJ
coucou a tous, j'ai trouvée un petit script sur un forum (je sais plus où hélas) qui permetais d'asseoir un PJ sur une chaise et ça marche pas mal (j'ai pas testé toutes les chaises mais sur toutes celles que j'ai testées ça marche bien)

Code:
void main() {
  object oChair = OBJECT_SELF ;
  object oPC = GetLastUsedBy() ;
  location lLoc = Location(GetArea(oChair), GetPosition(oChair), GetFacing(oChair) + 180) ;
  AssignCommand(oPC,JumpToLocation(lLoc)) ;
  PlayCustomAnimation(oPC,"sitidle",1) ;
}

pour l'itiliser c'est simple faut metre les parametre suivent de la chaisse :
Proprietes : Comportement : Statique : FALSE
Proprietes : Comportement : Utilisable ? : TRUE
Proprietes : Scripts : Script declenche par l'utilisation : alia_assie_pj

et ça m'a donné l'idée (aidée par mon admin) de faire la meme chose mais pour les PNJ, après pas mal de tests j'ai trouvée un truc qui marche bien, voici le script :
Code:

/********************************************************************************/
/*                                                                              */
/*                               Script pour Shamael                            */
/*                                                                              */
/*                         Fonctions pour assoire un PNJ                        */
/*                                                                              */
/*                                                                              */
/* pour utilise ce script il nous faut une chaise et une PNJ                    */
/* il faut qu'on configure c'est deux objets corectement :                      */
/* pour la chaise : dans les proprietes                                         */
/*      Comportement : Statique : FALSE                                         */
/*      Scripts : Script recurrent : alia_assie_pnj                             */
/* pour le PNJ : dans les proprietes                                            */
/*      General : Tag : pnj_assie                                               */
/*                                                                              */
/* Alia Atreides(c)11/2006                                                      */
/********************************************************************************/

/********************************************************************************/
// la fonction pour assoire le PNJ
void main()
{
   object oChair = OBJECT_SELF ;
   object oPNJ = GetNearestObjectByTag("pnj_assie") ;
   location lLoc = Location(GetArea(oChair), GetPosition(oChair), GetFacing(oChair) + 180) ;
   AssignCommand(oPNJ,JumpToLocation(lLoc)) ;
   PlayCustomAnimation(oPNJ,"sitidle",1) ;
}

_________________
Alia Atreides, scripteuse en herbe


Dernière édition par Alia Atreides le 26/11/2006 11:07; édité 1 fois
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
Amo



Inscrit le: 06 Juil 2006
Messages: 37
Localisation: Paris (pas loin)
Message Posté le: 22/11/2006 1:24 Sujet du message:
C'est bien mais avec ca tu devras crée un script par personnage qui va devoir s'assoir, au final ca risque d'encombrer pas mal.
A ta place (et c'est ce que je vais faire Razz) j'utiliserais les variables pour avoir juste un script pour tous en remplacant :
Code:
object oPNJ = GetNearestObjectByTag("pnj_assie") ;

par
Code:
object oPNJ = GetNearestObjectByTag(GetLocalString(oChair,"personnage"));


Pour obtenir ceci :
Code:
void main()
{
   object oChair = OBJECT_SELF ;
   object oPNJ = GetNearestObjectByTag(GetLocalString(oChair,"personnage"));
   location lLoc = Location(GetArea(oChair), GetPosition(oChair), GetFacing(oChair) + 180) ;
   AssignCommand(oPNJ,JumpToLocation(lLoc)) ;
   PlayCustomAnimation(oPNJ,"sitidle",1) ;
}


Capture d'ecran de la fenêtre de variable de la chaise :
(c'est un exemple donc, a toi de voir comment tu veux nommé ta variable selon ton organisation ^^)


J'ai tester et ca fonctionne.

A bientôt !
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger
Alia Atreides



Inscrit le: 20 Nov 2006
Messages: 26
Message Posté le: 22/11/2006 13:42 Sujet du message:
avec la fonction GetNearestObjectByTag() tu prends le PNJ de tag voulu le plus proche de la chaise, donc tu met tous tes PNJ que tu veux asseoir au meme tag et voila tu n'as rien besoin de faire (j'ai testé) je trouve ca plus simple non ?

mais je note ta façon c'est vrai que j'avais pas pansez a ça hihihi ça peut servir hihihihi
_________________
Alia Atreides, scripteuse en herbe
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
Alia Atreides



Inscrit le: 20 Nov 2006
Messages: 26
Message Posté le: 22/11/2006 15:28 Sujet du message:
j'ai retrouvé là où j'avais pris le script pour asseoire le PJ et comme je suis pas du genre à prendre les scripts des autres comme étant de moi voilà le lieu : http://www.system-tek.com/nwinter/phpbb2/viewtopic.php?t=10351
_________________
Alia Atreides, scripteuse en herbe
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
Amo



Inscrit le: 06 Juil 2006
Messages: 37
Localisation: Paris (pas loin)
Message Posté le: 22/11/2006 18:14 Sujet du message:
Alia Atreides
avec la fonction GetNearestObjectByTag() tu prend la PNJ de tag voulu le plus proche de la chaisse, donc tu met tous tes PNJ que tu veux assoir au meme tag et voila tu n'a rien besion de faire (j'ai tester) je trouve ca plus simple non ?

mais je note ta fasson c'est vrais que j'avais pas panssez a ca hihihi ca peu servire hihihihi


C'est vrai que ta methode est plus simple pour le mappeur, mais le jour où ton PNJ devra avoir un tag bien specifique pour un autre script tu vas faire comment? Razz

Enfin en tout cas ils fonctionnent et je t'en remercie, je vais les utiliser sur mon module Wink
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur MSN Messenger
Alia Atreides



Inscrit le: 20 Nov 2006
Messages: 26
Message Posté le: 23/11/2006 4:31 Sujet du message:
c'est vrai que j'ai pas reflechit à tout, c'est pour ça que je vais tester ta méthode hihihih et pis faut bien que mon mappeur adoré bosse un peu hihihiih
_________________
Alia Atreides, scripteuse en herbe
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
Miltiades



Inscrit le: 05 Nov 2006
Messages: 175
Message Posté le: 26/11/2006 13:20 Sujet du message:
j'ai essayé ton script mais il semblerait qu'il ne fonctionne pas pour les tabourets. Le PJ s'assied dans le vide mais juste à côté du tabouret.

Le 180 correspond à l'angle selon lequel le PJ va s'asseoir?

Je ne suis pas très fortiche en script ^^
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé
Tatav



Inscrit le: 04 Oct 2006
Messages: 79
Message Posté le: 26/11/2006 15:20 Sujet du message:
Je ne me suis pas encore penché sur le sujet, j'ai laissé le script pour s'asseoir à la facon nwn1 (qui ne marche pas terrible d'ailleurs).
Enfin ce qui me dérange, c'est que d'un point de vue conceptuel, c'est la chaise qui choisit la personne qui va s'asseoir et non pas la personne qui décide de s'asseoir.

D'abord, le premier soucis de ton script placé sur le onHeartBeat, est qu'il fait asseoir le personnage déjà assis toutes les 6 secondes. Cependant, comme il est déjà assis, il sera le plus près donc tu évites le soucis d'avoir deux PNJ assis à la même place en même temps. Enfin si un joueur est déjà dessus, la rien n'empêche d'avoir un PJ et un PNJ qui soient sur la même chaise ( enfin je prends pas en compte les collisions dynamiques peut être que l'autre se fait éjecter...)
Donc, peut être rajouter un LocalInt dessus qui gère si la chaise est occupée ou non.
Si elle est occupée, tu n'executes pas ton code pour la faire s'asseoir. Dans ce cas la , il faut espérer que le PNJ ne soit pas forcé à se lever non plus sinon elle sera déclarée comme occupée alors qu'elle est vide...

Je ne sais pas à quoi est destiné ton module mais, si c'est pour un monde persistant, prenons le cas d'une taverne avec une bonne vingtaine de chaises, si cette salle est vide de joueurs réels, il est fort dommage d'utiliser des ressources pour que les PNJs continuent leurs animations et donc que 20 OnHeartBeat tournent ainsi de manière inutile. Faire en sorte que le PNJ décide ou non à l'avantage de pouvoir effacer les PNJs quand la pièce est vide et de les faire apparaitre quand quelqu'un entre. Ainsi il n'y à plus de scripts réccurents tournant en fond inutilement.
De plus, tu peux mettre toutes tes chaises avec le même Tag ce qui est plus simple à mapper, une chaise custom que tu places ou tu le souhaites à volonté. Et tes PNJs gardent des Tag unique ce qui est pratique à la longue.
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur
Alia Atreides



Inscrit le: 20 Nov 2006
Messages: 26
Message Posté le: 26/11/2006 22:17 Sujet du message:
c'est une bonne idée en fait j'avais fais des tests pour que ce soit le PNJ qui ai le script (après j'ai pas trop cherché mais je pense que je le mettrais plus dans un autre event que le recurent) mais le problème c'est que (je sais vraiment pas pourquoi) le PNJ s'assoie a moitié sur la chaise a moitié dans le vide ..... j'ai cherché un peu mais je suis pas encore une pro du script pour arrivée a voir comment faire.... j'ai fait une simple adaptation du script que j'avais trouvé pour les joueurs.......

je vais essayé de voir pour modifier cela mais si des gens voient comment faire hihihi ca m'aidera peut-être hihihih

merci
_________________
Alia Atreides, scripteuse en herbe
Répondre en citant
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
Montrer les messages depuis:   

Page 1 sur 1
Sauter vers:  

 

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

Traduction par : phpBB-fr.com
Powered by phpBB © 2001, 2007 phpBB Group