JeuxOnLineForumsPlusConnectés : 219 (sites) | 375 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [Script] Faire s'asseoir un perso RSS
   
Répondre
Partager Outils Rechercher
Avatar de Daynos de Nory
Daynos de Nory
Alpha & Oméga
 
Avatar de Daynos de Nory
 

[Script] Faire s'asseoir un perso

Script initialement proposé par Elmo :

A mettre sur onSpawn du perso

Code PHP:
void main()
{
    
object oChair GetNearestObjectByTag("tagdelachaise");
    
ActionSit(oChair);

Lien direct vers le message - Vieux
Avatar de ¤ TynriL ¤
¤ TynriL ¤
Bagnard
 
Avatar de ¤ TynriL ¤
 


Daynos deviendrait-il sénile?

http://forums.jeuxonline.info/showth...threadid=89266

Edit Daynos >> Nan. Je trouve que 92 sujet c'est chiant à parcourir quand on cherche un script. Je fais 1 sujet = 1 script puis un annuaire global vers ces scripts

Réédit Tyn >> Ah je vois. Bonne initiative
Lien direct vers le message - Vieux
Avatar de Daynos de Nory
Daynos de Nory
Alpha & Oméga
 
Avatar de Daynos de Nory
 
Script proposé par Eliossar :

Bon alors je ne sais pas si le post du script d' Elmo pour s'assoir marche ms j'en ai fait un autre. Mais cette fois ci qui est dans les propriétés de la chaise.
Mettre useable pour la chaise
ensuite dans OnUsed mettre


Code PHP:
void main()
{
    
object chaise;
    
//le tag de la chaise
    
chaise GetObjectByTag("tagdelachaise");
    
    
//fait agir l'object le plus proche de la chaise cad le joueur
    //l'action est de s'assoir
    
AssignCommand(GetNearestObject(OBJECT_TYPE_CREATURE,chaise,1),ActionSit(chaise));

    
//cette partie permet juste de faire le test
    //pour savoir si l'object est bien trouve
    //s'il ne l'ai pas alors le jeu quitte dans ce cas
    
if (chaise == OBJECT_INVALID)
    {
        
EndGame("End");
    }



Donc ce script permet de faire s'assoir n'importe quel joueur.
Ne pas mettre un objet trop pret de la/des chaise(s) pour pas géner le joueur pour s'assoir et surtout pour ne pas que avoir de conflit lors de la détection de l'objet le plus proche. Il faut que le joueur soit le plus proche objet de la chaise pour que ça marche sinon je pense que ça marchera pas.

__________________
Lien direct vers le message - Vieux
Avatar de Daynos de Nory
Daynos de Nory
Alpha & Oméga
 
Avatar de Daynos de Nory
 
Posté par talendil
Salut,
sympa ton script, Eliossar !
Mais y'a un truc qi m'échappe
Je ne comprends pas pourquoi tu utilises la constante OBJECT_TYPE_ALL plutôt que OBJECT_TYPE_CREATURE dans cette partie du code :
Code PHP:
AssignCommand(GetNearestObject(OBJECT_TYPE_ALL,chaise,1),ActionSit(chaise)); 

A mon avis, ça éviterait le conflit dont tu parles avec un autre objet trop proche, non ?
Lien direct vers le message - Vieux
Avatar de Daynos de Nory
Daynos de Nory
Alpha & Oméga
 
Avatar de Daynos de Nory
 
posté par Eliossar
Oui en effet tu as raison.
Désolé ms j'ai commencé à utiliser le Toolset juste cette nuité donc je n'ai pas vu toutes les fonctions ou toutes les variables.
Merci talendil
Lien direct vers le message - Vieux
Avatar de Daynos de Nory
Daynos de Nory
Alpha & Oméga
 
Avatar de Daynos de Nory
 
posté par Majca
je dirais même plus !

Tu devrais utiliser ceci:

Code PHP:
GetNearestCreature (CREATURE_TYPE_PLAYER_CHARPLAYER_CHAR_IS_PC ); 
=> la chaise cherchera le joueur le plus proche


pour un pnj:
Code PHP:
GetNearestCreature(CREATURE_TYPE_PLAYER_CHARPLAYER_CHAR_NOT_PC); 

Majca
Lien direct vers le message - Vieux
Avatar de Daynos de Nory
Daynos de Nory
Alpha & Oméga
 
Avatar de Daynos de Nory
 
posté par ZeDuckMaster
dans le genre :
script pour qu'un joueur s'asseye sur un objet lorsqu'il clique dessus .....

Code PHP:
void main()
{
    
object oChair OBJECT_SELF;
    
AssignCommand(GetLastUsedBy(),ActionSit(oChair));

le script est bien evidemment a placer dans le OnUsed

-> pas de tags predefinis, donc peut etre appliqué a n'importe quel objet tel quel sous la forme d'un seul script unique (quoique s'asseoir sur une table ou sur une armoire ca fait pas top top )


remarque : le fait de créer un objet temporaire (oChair) semble etre necessaire puisque la fonction AssignCommand prend un object en parametre et que la constante OBJECT_SELF seule ne marche pas (c'est un int je penses ...), le compilateur doit alors la transformer en objet valide dans le cas d'un assignement.
Lien direct vers le message - Vieux
irec
Roi
 
et pour que le pnj s'assoie parterre ? et non sur une chaise, c'est quoi le script ? ( de maniere a ce que apres un dialogue, il se remet parterre et ne reste pas debout )
Lien direct vers le message - Vieux
Avatar de Dark Cador
Dark Cador
Alpha & Oméga
 
Avatar de Dark Cador
 
pour faire s'asseoir une créature par terre, utilise ceci :

Code PHP:
void main()
{
int nAnimation ANIMATION_LOOPING_SIT_CROSS;
float fSpeed 1.0;

ActionPlayAnimation(nAnimationfSpeed,X.X); // ou X.X correspond a la duree en seconde.

Sachant que si tu veux que ton pnj reste assis par terre tout le temps, il faudra que la durée dépasse 6 secondes (c'est le temps d'une animation normale). A placer sur le OnHeartbeat donc.

Sinon, tu as la possibilité de faire un AssignCommand sur l'évenement OnEnter de l'area ou sont les créatures qui doivent s'asseoir (voir meme sur le OnHeartbeat de l'area si tu as beaucoup de creatures à faire asseoir).

Code PHP:
void main()
{
int nAnimation ANIMATION_LOOPING_SIT_CROSS;
float fSpeed 1.0;
oTarget GetObjectByTag("tag de la creature qui doit s'asseoir");

AssignCommand(oTargetActionPlayAnimation(nAnimationfSpeed,X.X)); // ou X.X correspond a la duree en seconde.


Dans ce cas, je te conseil de mettre une forte valeur pour la durée de l'animation (genre 600.0 secondes).
Lien direct vers le message - Vieux
Avatar de coolstar
coolstar
Alpha & Oméga
 
Avatar de coolstar
 
Lightbulb
Sûrement déjà vu...
Hi!


Note... Après plusieurs tests, je me suis rendu compte d'une chose élémentaire (tardivement je sais, mais je suis le nb de Langue-Laid)!


Les Animations des Créatures sont divisées en 2 Catégories :

- LOOPING (boucle ? continu ?)
- FIREFORGET (feu de paille ? bref ?)

Quoi qu'il en soit, il m'est apparu que les Animations de type LOOPING ne se répétaient pas à proprement parlé, mais se prolongeaient... à condition de prolonger la Durée... C le cas de SIT_CROSS par exemple (CF. Script de Shadoh)...


Tout ça pour en venir où ? et ben la conclusion qui a suivi, et de façon effective (j'ai éprouvé), c que ce type de fonction n'a pas besoin d'être placé dans le OnHeartbeat mais peut tout à fait fonctionner dans le OnSpawn... et ce même s'il l'on veut que ça dure... suffit juste de mettre une Durée suffisante (genre 600 sec)!

Mais si on parle au PNJ assis me diriez-vous ? et bien il suffit juste de rajouter le même Script de SIT_CROSS dans l'Action conséquente de la phrase d'entrée du PNJ ([PROPRIETAIRE]Bonjour!)... et veiller aussi à le mettre dans les emplacements prévus de "Scripts de fin dialogue" de l'onglet Fichier actuel (2.Normales & Abandon)... tout ça pour qu'il reste assis de bout en bout...

Mais j'imagine, comme vous me le diriez par ailleurs, qu'il peut y avoir d'autres types de prob (comme le fait que le PNJ soit attaqué et ne reprenne plus sa place), mais il suffit d'aviser... et puis le PNJ n'est pas toujours obligé de rester assis, selon...


Pour finir... tirant parti de ce constat, je me suis demandé comment remédier au prob des PNJs qui ne peuvent rester assis sur les Chaises quand on leur parle... je ne sais pas si on a déjà présenté la solution par ici (certainement j'imagine... j'ai beaucoup d'imagination oui...), mais je me suis personnellement rendu compte que l'Action ne peut être pérennisée de la même façon que les Animations... Du moins ça n'est pas élémentaire...

Il y a bien des questions que je me pose encore (comme "comment faire durer une Action ?" & "Comment appliquer SIT_CHAIR sur une Chair justement ??")... mais quoi qu'il en soit, j'ai trouvé là aussi une alternative à ce prob épineux...

J'ai donc, après divers essais et tests fructueux, réalisé que le prob semblait se situer dans le OnPerception... Script faisant réagir le PNJ à contre-sens de nos intentions d'immobilisme (Totalitarisme quand tu nous tient!)... aussi, dans le cadre de mes PNJs Assis sur Chaise, je me suis tout simplement contenté de supprimer le Script de base du OnPerception (est-ce mal ? sinon on peut faire des modifs avisées dessus ??)... et pour le reste j'ai fait la même chose que pour SIT_CROSS (OnSpawn& Rajouts dans les Fins de Conversation), mais avec l'Action ActionSit...)!!
Code PHP:
void main()
{
    
object oChair GetObjectByTag ("Chair1") ;
    
ActionSit(oChair) ;

ET CA MARCHE!!! couché Médor!


Voilà, voilà...



... Voilà, de longue explications pour ne pas balancer les choses gratuitement... et pour signifier aussi aux nbs comme moi comment l'exploration élémentaire peut apporter ses lumières...

Lien direct vers le message - Vieux
Avatar de Auron
Auron
Roi / Reine
 
Avatar de Auron
 
et voila une auter moule du sript , mais j'ai rien pigé a vos modif ... alors qje ux assoir un pnj sur une chaise... c'et pas bon ca ?
Code PHP:

void main
()
{
    
object chaise;
    
//le tag de la chaise
    
chaise GetObjectByTag("tagdelachaise");
    
    
//fait agir l'object le plus proche de la chaise cad le joueur
    //l'action est de s'assoir
    
AssignCommand(GetNearestCreature(CREATURE_TYPE_PLAYER_CHARPLAYER_CHAR_NOT_PC);

    
//cette partie permet juste de faire le test
    //pour savoir si l'object est bien trouve
    //s'il ne l'ai pas alors le jeu quitte dans ce cas
    
if (chaise == OBJECT_INVALID)
    {
        
EndGame("End");
    }

Lien direct vers le message - Vieux
Avatar de B L I N G !
B L I N G !
Roi
 
Avatar de B L I N G !
 
il y a celui la aussi a mettre dans le OnUsed de la chaise :
Code PHP:
void main() 

  
object oChair OBJECT_SELF
  if(!
GetIsObjectValid(GetSittingCreature(oChair))) 
  { 
    
AssignCommand(GetLastUsedBy(), ActionSit(oChair)); 
  } 

Lien direct vers le message - Vieux
Avatar de coolstar
coolstar
Alpha & Oméga
 
Avatar de coolstar
 
Mais à quoi sert donc ANIMATION_LOOPING_SIT_CHAIR???
Lien direct vers le message - Vieux
Avatar de Mastokk
JOL Mastokk
Alpha & Oméga
 
Avatar de Mastokk
 
Citation:
Provient du message de coolstar
Mais à quoi sert donc ANIMATION_LOOPING_SIT_CHAIR???
Pour les jeux du cirque peut être . Une chaise, un artiste et hop des looping

Non ? j'ai faux ?
Lien direct vers le message - Vieux
Avatar de coolstar
coolstar
Alpha & Oméga
 
Avatar de coolstar
 
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [Script] Faire s'asseoir un perso
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 04h04.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite